创建校验类
import { Rule, RuleType } from '@midwayjs/validate';
export class SendVerifyCodeValidator {
// 手机号
@Rule(RuleType.string().label('手机号').length(11).required())
phoneNum: string;
}
export class BindPhoneValidator {
// 手机号
@Rule(RuleType.string().label('手机号').length(11).required())
phoneNum: string;
// 验证码
@Rule(RuleType.string().label('验证码').length(6).required())
verifyCode: string;
}
在控制器上加上 @Validate()
即可
/**
* 绑定手机号
*/
@Post('/bindPhoneNum')
@Validate({
errorStatus: httpCodeEnum.PARAMS_ERROR,
})
async bindPhoneNum(@Body() bindPhoneData: BindPhoneValidator) {
// TODO 绑定...
return this.ok(null);
}
重点:自定义错误提示语
// 验证码
@Rule(
RuleType.string().label('验证码').length(6).required().messages({
'string.length': '{{#label}}位数错误',
'string.empty': '验证码不能为空',
'any.required': '验证码必填',
})
)
verifyCode: string;
这么写 是不行的!!
需要在这里去定义
@Post('/bindPhoneNum')
@Validate({
errorStatus: httpCodeEnum.PARAMS_ERROR,
validationOptions: {
messages: {
'string.length': '{{#label}}位数错误',
'string.empty': '{{#label}}不能为空',
'any.required': '{{#label}}必填',
},
},
})
async bindPhoneNum(@Body() bindPhoneData: BindPhoneValidator)
但是这样会更改所有字段的对应异常提示
比如这个接口要校验手机号和验证码两个参数
当手机号校验11位未通过,会提示 手机号位数错误
当验证码校验6位未通过,会提示 验证码位数错误
如果需要自定义验证器 并 提示自定义的异常信息
// 验证码校验规则
@Rule(
RuleType.string()
.label('验证码')
.required()
.custom((value, helpers) => {
const reg = /^\d{6}$/;
if (reg.test(value)) {
return value;
}
throw new Error('格式错误');
})
)
verifyCode: string;
// 控制器中校验装饰器
@Validate({
errorStatus: httpCodeEnum.PARAMS_ERROR,
validationOptions: {
messages: {
'any.custom': '{{#label}}{{#error.message}}',
},
},
})
// 最终响应
{"code":5001,"message":"\"验证码\"格式错误"}