官方介绍
gitHub地址

  • 在获取到用户请求的参数后,不可避免的要对参数进行一些校验。
  • 插件下载
npm i egg-validate --save
  • config/plugin.js配置
exports.validate = {
  enable: true,
  package: 'egg-validate',
};
  • config.default.js
  config.validate = {
    // 配置参数校验器,基于parameter
    convert: true, // 对参数可以使用 convertType 规则进行类型转换
    // validateRoot: false,   // 限制被验证值必须是一个对象。
    widelyUndefined: true
  }
  • convert会对入参进行转换,建议开启。举个例子,使用表单中默认的 submit 类型按钮提交表单时,提交过来的往往是序列化后的字符串,那些期望是数字类型的字段就会始终验证不过。而开启此项后,会对入参按希望的类型进行转换。
  • widelyUndefined 开启后,会把空字符串,NaN,null 这些转成 undefined,将这些异常的数据进行了统一,方便后续处理。
  • 新建文件 app/validate/user.js文件夹
'use strict'

module.exports = app => {
  const { validator } = app
  // 自定义校验规则
  validator.addRule('userName', (rule, value) => {
    if (value.length < 8 || value.length > 20) {
      return '用户名的长度应该在8-20之间'
    }
  })
  validator.addRule('note', (rule, value) => {
    if (value.length > 100) {
      return '备注不超过100字'
    }
  })
  validator.addRule('email', (rule, value) => {
    const re = RegExp(/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/)
    if (!re.test(value)) {
      return '邮箱格式不正确'
    }
  })
  validator.addRule('phone', (rule, value) => {
    const reg = /^1[3|4|5|6|7|8][0-9]\d{8}$/
    if (!reg.test(value)) {
      return '手机号格式不正确'
    }
  })
}

  • 启动时载入校验规则 app.js文件(没有则在根目录新建一个)
'use strict';

const path = require('path');

module.exports = app => {
  // 加载所有的校验规则
  const directory = path.join(app.config.baseDir, 'app/validate');
  app.loader.loadToApp(directory, 'validate');
};

  • 使用controller中
  async login() {
    const { ctx, service, app } = this
    ctx.validate({
      userName: { type: 'userName' }
    })
    const { userName, passWord } = ctx.request.body
    const params = { passWord, userName }
    app.logger.warn('111111133', ctx.request.body)
    const res = await service.baseService.userService.login(params)
    ctx.body = res
  }

在这里插入图片描述

  • 首先判断这个userName有没有在ctx.request.body里面,没有就跑出参数不存在、然后是userName不能为空、然后得是去app/validate/user.js去找对应的自定义规则。有一个不符合都会抛出错误。
  • 默认校验的是ctx.request.body的参数。
  • 另外一种写法
let errs = app.validator.validate({ userName: ‘string‘ }, ctx.request.body);

ctx.validate检验不通过会抛出异常,而app.validator.validate检验不通过会返回错误。你可以自己选择要对这个错误怎么处理,是不管呢还是返回前端
在这里插入图片描述

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐