1.0.5 • Published 9 months ago

@wisefox/egg-validate-plus v1.0.5

Weekly downloads
-
License
MIT
Repository
-
Last release
9 months ago

egg-validate-plus

说明

本模块基于 egg-validate-plus 进行扩展

依赖的 egg 版本

egg-validate-plus 版本egg 1.x
1.x😁
0.x

用法

开启插件

// config/plugin.{env}.js
exports.validatePlus = {
  enable: true,
  package: 'egg-validate-plus',
};

配置插件

suppressWarning 、first、firstFields 具体参数含义请参考 async-validator

// config/config.{env}.js
config.validatePlus = {
  suppressWarning: true,
  first: false,
  firstFields: true,
  resolveError(ctx, errors) {
    if (errors.length) {
      ctx.type = 'json';
      ctx.status = 400;
      ctx.body = {
        code: 400,
        error: errors,
        message: '参数错误',
      };
    }
  }
};

使用插件

目录结构

|- MY-PROJECT
    |- app
        |- controller
            |- user.js
            |- post.js
        |- rules
            |- user
                |- login.js [用户登录参数校验规则]
            |- post
                |- add.js [创建 post 参数校验规则]
    |- config
        |- config.default.js
        |- plugin.js
    |- package.json
    |- README.md

规则的传入方式

1.传入字符串
// app/middleware/validate.js
const { ValidationException } = require("../exception");
// rule: 'user.login'
module.exports = rule => {
    return async function validateHandler(ctx, next) {
        // 判断ctx.request.body,ctx.request.query,ctx.params是否为空对象,不为空对象的拼接成一个新对象
        const params = Object.assign({}, ctx.request.body, ctx.request.query, ctx.params);
        // 验证参数
        let result = await ctx.validate(rule, params);
        if (!result.validate) {
            let errors = result.errors;
            // 遍历错误数组,将每个错误对象转换为对象
            errors = errors.map(e => { return { [e.field]: e.message } });
            // 将错误数组转换为对象
            errors = Object.assign({}, ...errors);
            // 抛出异常
            throw new ValidationException(errors);
        }
        // 验证通过,继续执行
        await next();
    }
};

注意:不要带上 rules

2.直接传入验证规则对象
// app/controller/xx.js
// 直接引入 rules 文件下的验证规则,也可以是自己写的验证规则对象
const rule = this.app.rules.user.login
// 数据格式
// const rule = {
//   id: [
//     { required: true },
//     { type: 'number', message: 'id 必须为数字 }
//   ],
//   password: [
//     { required: true },
//     { type: 'string', message: 'password 必须为字符串 }
//   ]
// }

// 从客户端传入的参数 
const { query } = this.ctx.request;
// 数据格式: 
// query = {
//   username: 123456,
//   password: 'abcdefg'
// }

// 拿到验证结果
const validateResult = await this.ctx.validate(rule, query)
// 验证不通过时,阻止后面的代码执行
if (!validateResult.validate) return

使用场景

  • Why and What: 描述为什么会有这个插件,它主要在完成一件什么事情。 尽可能描述详细。
  • How: 描述这个插件是怎样使用的,具体的示例代码,甚至提供一个完整的示例,并给出链接。

详细配置

请到 config/config.default.js 查看详细配置项说明。

单元测试

提问交流

请到 egg issues 异步交流。

License

MIT

1.0.5

9 months ago

1.0.4

9 months ago

1.0.3

9 months ago

1.0.2

9 months ago

1.0.0

9 months ago