@@ -24,7 +24,7 @@ import { isLike, TypeKind } from 'brisk-ts-extends';
24
24
import { get , getParentTypeKind , getSubTypeKind } from 'brisk-ts-extends/runtime' ;
25
25
import { addSwaggerRoute , addSwaggerTag , getSwaggerHandler , initSwaggerConfig } from './swagger' ;
26
26
import { isValid , parseBoolean } from './utils' ;
27
- import { addRoute , BriskControllerError , initRouter , isFormData , isJson , router , setBaseUrl } from './router' ;
27
+ import { addRoute , BriskControllerError , initRouter , isFormData , isJson , isXml , router , setBaseUrl } from './router' ;
28
28
29
29
30
30
const defaultRegion = Symbol ( 'briskController' ) ;
@@ -117,24 +117,27 @@ export function resultFactory<T>(result: T): BriskControllerResultFactory<T> {
117
117
// 参数校验、参数类型转换
118
118
function validateAndTransParameter ( param : BriskControllerParameter , value : any ) : any {
119
119
if ( ! isValid ( value ) && param . required ) {
120
+ logger . error ( `validateAndTransParameter param '${ param . name } ' required` ) ;
120
121
throwError ( 400 , `param '${ param . name } ' required` ) ;
121
122
}
122
123
123
- if ( ! param . type ) {
124
+ if ( ! param . type || param . type === 'any' ) {
124
125
return value ;
125
126
}
126
127
127
128
if ( param . type === 'Date' ) {
128
129
const timestamp = Date . parse ( value ) ;
129
130
// 无法转换成日期
130
131
if ( Number . isNaN ( timestamp ) ) {
132
+ logger . error ( `validateAndTransParameter param '${ param . name } ' type error` ) ;
131
133
throwError ( 400 , `param '${ param . name } ' type error` ) ;
132
134
}
133
135
return new Date ( timestamp ) ;
134
136
}
135
137
136
138
if ( getParentTypeKind ( param . type ) === 'Array' ) {
137
139
if ( ! Array . isArray ( value ) ) {
140
+ logger . error ( `validateAndTransParameter param '${ param . name } ' type error` ) ;
138
141
throwError ( 400 , `param '${ param . name } ' type error` ) ;
139
142
}
140
143
return value . map ( ( item : any ) => validateAndTransParameter ( { ...param , type : getSubTypeKind ( param . type ) as TypeKind } , item ) ) ;
@@ -146,18 +149,21 @@ function validateAndTransParameter(param: BriskControllerParameter, value: any):
146
149
}
147
150
148
151
if ( typeof value !== 'string' ) {
152
+ logger . error ( `validateAndTransParameter param '${ param . name } ' type error` ) ;
149
153
throwError ( 400 , `param '${ param . name } ' type error` ) ;
150
154
}
151
155
switch ( param . type ) {
152
156
case 'string' :
153
157
return value ;
154
158
case 'number' :
155
159
if ( Number . isNaN ( Number ( value ) ) ) {
160
+ logger . error ( `validateAndTransParameter param '${ param . name } ' type error` ) ;
156
161
throwError ( 400 , `param '${ param . name } ' type error` ) ;
157
162
}
158
163
return Number ( value ) ;
159
164
case 'boolean' :
160
165
if ( parseBoolean ( value ) === undefined ) {
166
+ logger . error ( `validateAndTransParameter param '${ param . name } ' type error` ) ;
161
167
throwError ( 400 , `param '${ param . name } ' type error` ) ;
162
168
}
163
169
return parseBoolean ( value ) ;
@@ -167,6 +173,7 @@ function validateAndTransParameter(param: BriskControllerParameter, value: any):
167
173
}
168
174
169
175
if ( ! isLike < any > ( value , param . type ) ) {
176
+ logger . error ( `validateAndTransParameter param '${ param . name } ' type error` ) ;
170
177
throwError ( 400 , `param '${ param . name } ' type error` ) ;
171
178
}
172
179
@@ -191,6 +198,7 @@ function validateParameter(param: BriskControllerParameter, value: any) {
191
198
const error = param . validator ?.( val ) ;
192
199
193
200
if ( error && typeof error === 'object' ) {
201
+ logger . error ( Object . values ( error ) ?. [ 0 ] ?. defaultTip || '' ) ;
194
202
throwError ( 400 , Object . values ( error ) ?. [ 0 ] ?. defaultTip ) ;
195
203
}
196
204
@@ -208,13 +216,13 @@ function getParameters(ctx: Context, params?: BriskControllerParameter[]) {
208
216
let value : any ;
209
217
switch ( item . is ) {
210
218
case BRISK_CONTROLLER_PARAMETER_IS_E . IN_BODY :
211
- value = isJson ( ctx ) ? data [ item . name ] : undefined ;
219
+ value = isJson ( ctx ) || isXml ( ctx ) ? data [ item . name ] : undefined ;
212
220
break ;
213
221
case BRISK_CONTROLLER_PARAMETER_IS_E . FORM_DATA :
214
222
value = isFormData ( ctx ) ? data [ item . name ] : undefined ;
215
223
break ;
216
224
case BRISK_CONTROLLER_PARAMETER_IS_E . BODY :
217
- value = isJson ( ctx ) ? data : undefined ;
225
+ value = isJson ( ctx ) || isXml ( ctx ) ? data : undefined ;
218
226
break ;
219
227
case BRISK_CONTROLLER_PARAMETER_IS_E . QUERY :
220
228
value = ctx . request . query [ item . name ] ;
@@ -290,30 +298,33 @@ export function addRequest(requestPath: string, handler: BriskControllerRequestH
290
298
query : ctx . request . query ,
291
299
} ) ;
292
300
const res = await Promise . resolve ( handler ( ...getParameters ( ctx , option ?. params ) ) ) ;
293
- if ( res . _extra ) {
294
- const extra = res . _extra ;
295
- delete res . _extra ;
296
- extra . cookies ?. forEach ?.( ( item : any ) => {
297
- ctx . cookies . set ( item . key , item . value , item . option ) ;
298
- } ) ;
299
- extra . headers ?. forEach ?.( ( item : any ) => {
300
- ctx . response . set ( item . key , item . value ) ;
301
- } ) ;
302
- }
301
+ if ( typeof res === 'object' ) {
302
+ if ( res . _extra ) {
303
+ const extra = res . _extra ;
304
+ delete res . _extra ;
305
+ extra . cookies ?. forEach ?.( ( item : any ) => {
306
+ ctx . cookies . set ( item . key , item . value , item . option ) ;
307
+ } ) ;
308
+ extra . headers ?. forEach ?.( ( item : any ) => {
309
+ ctx . response . set ( item . key , item . value ) ;
310
+ } ) ;
311
+ }
303
312
304
- if ( res . _briskControllerRedirect ) {
305
- ctx . response . status = res . _briskControllerRedirect . status ;
306
- ctx . redirect ( res . _briskControllerRedirect . targetPath ) ;
307
- return false ;
308
- }
313
+ if ( res . _briskControllerRedirect ) {
314
+ ctx . response . status = res . _briskControllerRedirect . status ;
315
+ ctx . redirect ( res . _briskControllerRedirect . targetPath ) ;
316
+ return false ;
317
+ }
309
318
310
- if ( res . _briskControllerForward ) {
311
- ctx . request . method = res . _briskControllerForward . method . toUpperCase ( ) ;
312
- ctx . request . path = res . _briskControllerForward . targetPath ;
313
- await router ( ctx , ( ) => Promise . resolve ( null ) ) ;
314
- } else {
315
- ctx . response . body = res ;
319
+ if ( res . _briskControllerForward ) {
320
+ ctx . request . method = res . _briskControllerForward . method . toUpperCase ( ) ;
321
+ ctx . request . path = res . _briskControllerForward . targetPath ;
322
+ await router ( ctx , ( ) => Promise . resolve ( null ) ) ;
323
+ return true ;
324
+ }
316
325
}
326
+ ctx . response . body = res ;
327
+
317
328
logger . info ( `response ${ ctx . request . url } ` , {
318
329
status : ctx . response . status ,
319
330
body : ctx . response . body ,
0 commit comments