美文网首页
【cool-admin】接口参数校验Joi

【cool-admin】接口参数校验Joi

作者: 码码虎呼 | 来源:发表于2023-07-25 16:30 被阅读0次

创建校验类


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":"\"验证码\"格式错误"}

相关文章

  • 基于Python的接口自动化测试(3)

    封装接口返回值校验(关键参数校验和参数完整性校验)

  • 2018-12-10 登录功能(下)

    1.JSR303参数校验 1.1 引入依赖 1.2 参数校验接口 @interface IsMobile;校验类 ...

  • koa中使用joi进行参数校验

    在编写api的时候通常都需要对参数进行校验,包括参数的类型、必填等;如果是字符串,是否可以为空、该符合什么规则等;...

  • Hibernate Validator实战篇

    在写程序的时候经常需要进行数据校验,比如服务端对http请求参数校验,数据入库时对字段长度进行校验,接口参数校验,...

  • 自定义注解实现逻辑校验

    在日常的接口开发中,为了保证接口的稳定安全,我们一般需要在接口逻辑中处理两种校验: 参数校验 业务规则校验 首先我...

  • 服务-短信验证码校验接口

    验证码校验接口 URL : /sys/sms_verification/result 请求参数 : 请求参数例...

  • SpringBoot 接口参数校验

    springboot2.3版本以后需要引入validation依赖: 或者使用: 一、 @Valid和@Valid...

  • Java接口参数校验

    如果方法上的RequestMapping注解没有设置method属性,则get和post请求默认都可以访问。 Va...

  • 接口开发的艺术:前端不可信

    接口开发: 默认前端不可信 对前端数据必须做校验:1⃣️ 签名校验2⃣️必传参数校验 缺点:增加后端的负担: 后端...

  • Spring Boot 校验

    前言 平常开发接口中,有大量重复的参数合法性校验,例如: 参数众多,校验方式也各为不同,代码难免变得臃肿。 Spr...

网友评论

      本文标题:【cool-admin】接口参数校验Joi

      本文链接:https://www.haomeiwen.com/subject/kejhpdtx.html