1- # 参数校验(arg-decorator)
1+ # 内置参数装饰器(ArgDecorator)
22
3- ` Umajs ` 提供了 ` createArgDecorator ` 可以很方便的创建参数装饰器 ,并且框架还提供了如下装饰器直接使用。
3+ ` Umajs ` 提供了 ` createArgDecorator ` 可以很方便的创建自定义参数装饰器 ,并且框架还提供了如下装饰器直接使用。
44
55## 使用
66
@@ -24,7 +24,7 @@ saveUser(@Body.ToNumber('age') age: number){
2424}
2525```
2626
27- 当接口访问` localhost:port//saveUser?age=str ` 时,controller 方法将终止执行 ,并默认返回客户端提示信息
27+ 当接口访问` localhost:port//saveUser?age=str ` 时,controller方法将终止执行 ,并默认返回客户端提示信息
2828
2929``` js
3030{
@@ -33,63 +33,102 @@ saveUser(@Body.ToNumber('age') age: number){
3333}
3434```
3535
36- ## API
37-
38- | 修饰器 | 使用说明 |
39- | ---------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
40- | @Query (id: string ) | url 参数修饰器 |
41- | @Body (id?: string or Function or string[ ] ) | POST 请求参数修饰器 ` @Body() body:object ` or ` @Body('id') id:any ` or ` @Body(['name','age']) user: {name:any,age:any} ` |
42- | @Require (id: string,message?: string ) | url 参数修饰并做必填校验 |
43- | @ToNumber (id: string,message?: string) | 参数修饰并类型转换为 number 类型 类型转换失败则会终止函数执行并返回提示内容 |
44- | @ToBoolean (id: string,message?: string) | 参数修饰并类型转换布尔类型 类型转换失败则会终止函数执行并返回提示内容 |
45- | @ToArray (id: string, split?: string ,message?: string) | 参数修饰并类型转换数组 类型转换失败则会终止函数执行并返回提示内容 |
46- | @ToDate (id: string,message?: string) | 参数修饰并类型转换为 date 类型 类型转换失败则会终止函数执行并返回提示内容 备注:参数接受如果为数字也会按照时间强制转换为时间格式。 |
47- | @Equals (id: string,comparison?: any) | 参数修饰并做值对比校验 |
48- | @NotNull (id: string,message?: string) | 限制必须不为 null |
49- | @AssertFalse (id: string,message?: string) | 限制必须为 false |
50- | @AssertTrue (id: string,message?: string) | 限制必须为 true |
51- | @DecimalMax (id: string,value: number,message?: string) | 限制必须为一个不大于指定值的数字 |
52- | @DecimalMin (id: string,value: number,message?: string) | 限制必须为一个不小于指定值的数字 |
53- | @Future (id: string,message?: string) | 限制必须是一个将来的日期 |
54- | @Max (id: string,value: number,message?: string) | 限制必须为一个不大于指定值的数字 |
55- | @Min (id: string,value: number,message?: string) | 限制必须为一个不小于指定值的数字 |
56- | @Past (id: string,message?: string) | 限制必须是一个过去的日期 |
57- | @Pattern (id: string,pattern: RegExp,message?: string) | 限制必须符合指定的正则表达式 |
58- | @Size (id: string,max: number,min: number,message?: string) | 限制字符长度必须在 min 到 max 之间 |
59- | @NotEmpty (id: string,message?: string) | 验证注解的元素值不为 null 且不为空(字符串长度不为 0、集合大小不为 0) |
60- | @NotBlank (id: string,message?: string) | 验证注解的元素值不为空(不为 null、去除首位空格后长度为 0),不同于@NotEmpty ,@NotBlank 只应用于字符串且在比较时会去除字符串的空格 |
61- | @Email (id: string,message?: string) | 验证注解的元素值是 Email |
62- | @Phone (id: string,message?: string) | 验证元素值是手机号 具体格式参考` https://github.com/validatorjs/validator.js/blob/master/src/lib/isMobilePhone.js ` |
63-
64- ## 自定义校验提示内容
65-
66- 框架默认修饰器提示信息可以通过配置文件` src/config/argDecorator.config.ts ` 进行覆盖。通过` Result ` 模块用户可以自定义校验失败时返回的数据格式或者方式,比如 json,或者状态码。
36+ ## 校验参数装饰器
37+
38+ | <div style =" width :450px " >修饰器</div > | <div style =" width :200px " >使用说明</div > |
39+ ---|---
40+ @Param (id: string ) | 动态路由参数修饰
41+ @Query (id: string ) | url参数修饰器
42+ @Body (id?: string or Function or string[ ] or class) | POST请求参数修饰器 ` @Body() body:class ` or ` @Body('id') id:any ` or ` @Body(['name','age']) user: {name:any,age:any} `
43+ @Require (id: string,message?: string ) | url参数修饰并做必填校验
44+ @ToNumber (id: string,message?: string) | 参数修饰并类型转换为number类型 类型转换失败则会终止函数执行并返回提示内容
45+ @ToBoolean (id: string,message?: string) |参数修饰并类型转换布尔类型 类型转换失败则会终止函数执行并返回提示内容
46+ @ToArray (id: string, split?: string ,message?: string) |参数修饰并类型转换数组 类型转换失败则会终止函数执行并返回提示内容
47+ @ToDate (id: string,message?: string) | 参数修饰并类型转换为date类型 类型转换失败则会终止函数执行并返回提示内容 备注:参数接受如果为数字也会按照时间强制转换为时间格式。
48+ @Equals (id: string,comparison?: any) | 参数修饰并做值对比校验
49+ @NotNull (id: string,message?: string) | 限制必须不为null
50+ @AssertFalse (id: string,message?: string) | 限制必须为false
51+ @AssertTrue (id: string,message?: string) | 限制必须为true
52+ @DecimalMax (id: string,value: number,message?: string) | 限制必须为一个不大于指定值的数字
53+ @DecimalMin (id: string,value: number,message?: string) | 限制必须为一个不小于指定值的数字
54+ @Future (id: string,message?: string) | 限制必须是一个将来的日期
55+ @Max (id: string,value: number,message?: string) | 限制必须为一个不大于指定值的数字
56+ @Min (id: string,value: number,message?: string) | 限制必须为一个不小于指定值的数字
57+ @Past (id: string,message?: string) | 限制必须是一个过去的日期
58+ @Pattern (id: string,pattern: RegExp,message?: string) | 限制必须符合指定的正则表达式
59+ @Size (id: string,max: number,min: number,message?: string) | 限制字符长度必须在min到max之间
60+ @NotEmpty (id: string,message?: string) | 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
61+ @NotBlank (id: string,message?: string) | 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty ,@NotBlank 只应用于字符串且在比较时会去除字符串的空格
62+ @Email (id: string,message?: string) | 验证注解的元素值是Email
63+ @Phone (id: string,message?: string) | 验证元素值是手机号 具体格式参考` https://github.com/validatorjs/validator.js/blob/master/src/lib/isMobilePhone.js `
64+
65+ ## 非校验参数修饰器
66+
67+ | <div style =" width :450px " >修饰器</div > | 使用说明 |
68+ | --------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
69+ | @Cookies (id: string ) | cookies 参数修饰器 |
70+ | @Headers (id: string ) | headers 请求头参数修饰器 |
71+ | @RequestParam (id: string ) | GET/POST 通用参数修饰器,POST 请求类型时参数获取优先级为:Body < Query 相同参数 url 携带参数覆盖 body 请求体中的属性值 |
72+ | @RequestFile (field: string) | 文件上传时文件参数修饰器 |
73+
74+ ## 高阶
75+
76+ ### Body参数装饰器接受class类
77+
78+ > 当Body传递为class类时,会将请求参数中获取到的数据作为参数调用类构造函数,同时也会进行属性类型校验,校验成功则返回实例化对象。更多class的使用请参考[ ` @umajs/class-validator ` ] ( https://github.com/Umajs/class-validator )
6779
6880``` ts
69- import { Result } from ' @umajs/core'
81+ // 定义class
82+ import { Type , Required , Min , Model } from ' @umajs/class-validator' ;
83+ export default class UserInfo extends Model {
84+ constructor ({ id , name , age }: UserInfo , isValid : boolean ) {
85+ super (isValid );
86+ this .id = id ;
87+ this .name = name ;
88+ this .age = age ;
89+ }
90+
91+ @Type (' number' )
92+ id: number = 123 ;
93+
94+ @Required ()
95+ name? : string ;
96+
97+ @Min (0 )
98+ age? : number ;
99+ }
70100
71- export default {
72- Require: {
73- err({ key , ctx , tip , val }) {
74- return Result .send (tip || ` 请求${key } 参数不能为空。入参值为${val } ` , 403 )
75- },
76- },
77- ToNumber: {
78- err({ key , ctx , tip , val }) {
79- return Result .json ({
80- code: 0 ,
81- msg: tip || ` 请求${key } 参数必须为数字类型。入参值为${val } ` ,
82- })
83- },
84- },
101+ // 参数装饰器使用
102+ @Path ({ value: ' /post' , method: RequestMethod .POST })
103+ model (@Body (UserInfo ) userInfo : user ) {
104+ return Result .send (` This Post body info is ${JSON .stringify (userInfo )} ` );
105+
106+ // >> {"code":0,"msg":{"validate":{"id":["id must be of type number."],"name":["name is required."],"age":["age must be greater than 0."]},"parms":{"id":"1","age":-10}}}
85107}
108+
86109```
87110
88- ## 其他参数修饰器(不具备参数校验功能)
111+ ### 自定义校验提示内容
89112
90- | 修饰器 | 使用说明 |
91- | --------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
92- | @Cookies (id: string ) | cookies 参数修饰器 |
93- | @Headers (id: string ) | headers 请求头参数修饰器 |
94- | @RequestParam (id: string ) | GET/POST 通用参数修饰器,POST 请求类型时参数获取优先级为:Body < Query 相同参数 url 携带参数覆盖 body 请求体中的属性值 |
95- | @RequestFile (field: string) | 文件上传时文件参数修饰器 |
113+ 框架默认修饰器提示信息可以通过配置文件` src/config/argDecorator.config.ts ` 进行覆盖。通过` Result ` 模块用户可以自定义校验失败时返回的数据格式或者方式,比如json,或者状态码。
114+
115+ ``` ts
116+ import { Result } from ' @umajs/core' ;
117+
118+ export default {
119+ Require: {
120+ err({key , ctx , tip , val }) {
121+ return Result .send (tip || ` 请求${key } 参数不能为空。入参值为${val } ` ,403 );
122+ },
123+ },
124+ ToNumber: {
125+ err({key , ctx , tip , val }) {
126+ return Result .json ({
127+ code: 0 ,
128+ msg: tip || ` 请求${key } 参数必须为数字类型。入参值为${val } ` ,
129+ });
130+ },
131+ },
132+ };
133+
134+ ```
0 commit comments