egg-validate-plus
用法
开启插件
// config/plugin.{env}.jsexportsvalidatePlus = enable: true package: 'egg-validate-plus';
配置插件
// config/config.{env}.jsconfigvalidatePlus = { if errorslength ctxtype = 'json'; ctxstatus = 400; ctxbody = 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/controller/xx.jsconst query = thisctxrequest; // 拿到验证结果const validateResult = await thisctx// 验证不通过时,阻止后面的代码执行if !validateResult return
注意:不要带上 rules
2.直接传入验证规则对象
// app/controller/xx.js// 直接引入 rules 文件下的验证规则,也可以是自己写的验证规则对象const rule = thisapprulesuserlogin// 数据格式// const rule = {// id: [// { required: true },// { type: 'number', message: 'id 必须为数字 }// ],// password: [// { required: true },// { type: 'string', message: 'password 必须为字符串 }// ]// } // 从客户端传入的参数 const query = thisctxrequest;// 数据格式: // query = {// username: 123456,// password: 'abcdefg'// } // 拿到验证结果const validateResult = await thisctx// 验证不通过时,阻止后面的代码执行if !validateResult return
使用场景
- 为什么要自己造轮子?
其实 egg 官方有一个 egg-validate 插件,非常的优秀。但是我觉得有几个不满意的地方:
- 不能使用自定义错误提示
- 类型校验兼容性差
- 非必填校验兼容性差
- 提供哪些更好的体验?
- 使用自定义错误提示
- 提供更多的类型校验
- 兼容更多非必填校验场景
依赖说明
依赖的 egg 版本
egg-validate-plus 版本 | egg 1.x |
---|---|
1.x | 😁 |
0.x | ❌ |
依赖的插件
- async-validator 目前大部分的校验规则插件都使用了 async-validator,包括前端的表单验证,egg-validate-plus 也不例外,感谢作者 yiminghe
默认配置
请到 config/config.default.js 查看详细配置项说明。