@@ -31,16 +31,16 @@ export class LinValidator {
3131
3232 async validate ( ctx : Context , alias ?: { } ) {
3333 this . alias = alias ;
34- const params = Object . assign (
35- { } ,
36- ctx . request . body ,
37- ctx . request . query ,
38- ctx . params ,
39- ctx . request . header
40- ) ;
41- for ( const it of Object . keys ( params ) ) {
42- set ( this . data , it , get ( params , it ) ) ;
43- }
34+ this . data = {
35+ body : ctx . request . body ,
36+ query : ctx . request . query ,
37+ path : ctx . params ,
38+ header : ctx . request . header
39+ } ;
40+ this . parsed = {
41+ ... this . data ,
42+ default : { }
43+ } ;
4444 if ( ! ( await this . checkRules ( ) ) ) {
4545 let obj = { } ;
4646 if ( this . errors . length === 1 ) {
@@ -106,7 +106,9 @@ export class LinValidator {
106106 const value = this [ key ] ;
107107 let defaultVal ;
108108 // 如果没有传入这个参数,检查这个校验链中是否有 isOptional 如果有通过,否则抛异常
109- if ( extendedValidator . isEmpty ( this . data [ key ] ) ) {
109+ // 去data下找key,二级目录查找 dataKey 为一级目录的路径
110+ const [ dataKey , dataVal ] = this . findInData ( key ) ;
111+ if ( dataVal === void 0 ) {
110112 let msg : string | undefined ;
111113 if ( isArray ( value ) ) {
112114 for ( const it of value ) {
@@ -132,7 +134,7 @@ export class LinValidator {
132134 if ( ! optional ) {
133135 this . errors . push ( { key, message : msg || `${ key } 不可为空` } ) ;
134136 } else {
135- this . data [ key ] = defaultVal ;
137+ this . parsed [ "default" ] [ key ] = defaultVal ;
136138 }
137139 } else {
138140 if ( isArray ( value ) ) {
@@ -142,17 +144,17 @@ export class LinValidator {
142144 if ( ! stoppedFlag && ! it . optional ) {
143145 let valid : boolean ;
144146 if ( isAsyncFunction ( it . validate ) ) {
145- valid = await it . validate ( this . data [ key ] ) ;
147+ valid = await it . validate ( this . data [ dataKey ] [ key ] ) ;
146148 } else {
147- valid = it . validate ( this . data [ key ] ) ;
149+ valid = it . validate ( this . data [ dataKey ] [ key ] ) ;
148150 }
149151 if ( ! valid ) {
150152 errs . push ( it . message ) ;
151153 // 如果当前key已有错误,则置stoppedFlag为true,后续会直接跳过校验
152154 stoppedFlag = true ;
153155 }
154156 }
155- it . parsedValue && ( this . parsed [ key ] = it . parsedValue ) ;
157+ it . parsedValue && ( this . parsed [ dataKey ] [ key ] = it . parsedValue ) ;
156158 }
157159 if ( errs . length !== 0 ) {
158160 this . errors . push ( { key, message : errs } ) ;
@@ -162,17 +164,17 @@ export class LinValidator {
162164 if ( ! stoppedFlag && ! value . optional ) {
163165 let valid : boolean ;
164166 if ( isAsyncFunction ( value . validate ) ) {
165- valid = await value . validate ( this . data [ key ] ) ;
167+ valid = await value . validate ( this . data [ dataKey ] [ key ] ) ;
166168 } else {
167- valid = value . validate ( this . data [ key ] ) ;
169+ valid = value . validate ( this . data [ dataKey ] [ key ] ) ;
168170 }
169171 if ( ! valid ) {
170172 errs . push ( value . message ) ;
171173 // 如果当前key已有错误,则置stoppedFlag为true,后续会直接跳过校验
172174 stoppedFlag = true ;
173175 }
174176 }
175- value . parsedValue && ( this . parsed [ key ] = value . parsedValue ) ;
177+ value . parsedValue && ( this . parsed [ dataKey ] [ key ] = value . parsedValue ) ;
176178 if ( errs . length !== 0 ) {
177179 this . errors . push ( { key, message : errs } ) ;
178180 }
@@ -227,12 +229,25 @@ export class LinValidator {
227229 if ( key ) {
228230 return key ;
229231 } else {
230- return get ( this . data , path , defaultVal && defaultVal ) ;
232+ const index = path . lastIndexOf ( "." ) ;
233+ const suffix = path . substring ( index + 1 , path . length ) ;
234+ return get ( this . parsed [ "default" ] , suffix , defaultVal && defaultVal ) ;
231235 }
232236 } else {
233237 return get ( this . data , path , defaultVal && defaultVal ) ;
234238 }
235239 }
240+
241+ private findInData ( key : string ) {
242+ const keys = Object . keys ( this . data ) ;
243+ for ( const k of keys ) {
244+ const val = get ( this . data [ k ] , key ) ;
245+ if ( val !== void 0 ) {
246+ return [ k , val ] ;
247+ }
248+ }
249+ return [ ] ;
250+ }
236251}
237252
238253export class Rule {
0 commit comments