// config/plugin.js
exports.validatePlusNext = {
enable: true,
package: 'egg-validate-plus-next',
};
// config/config.default.js
config.validatePlusNext = {
resolveError(ctx, errors) {
if (errors.length) {
ctx.type = 'json';
ctx.status = 400;
ctx.body = {
code: 400,
error: errors,
message: '参数错误',
};
}
}
};
|- MY-PROJECT
|- app
|- controller
|- admin
|- user.js
|- api
|- index.js
|- validate
|- admin
|- user.js [创建用户校验规则]
|- api
|- index.js [创建 api 参数校验规则]
|- config
|- config.default.js
|- plugin.js
|- package.json
|- README.md
// validate/admin/user
export default {
// 规则
rules: {
id: { type: 'number', required: true, message: 'id只能是数字' },
username: { type: 'string', required: true, message: '用户名不能为空' },
password: [
{ type: 'string', required: true, message: '密码不能为空' },
{ min: 6, max: 20, message: '密码只能在6到20位之间' },
],
},
// 场景
scene: {
create: [ 'username', 'password' ],
update: ['id','username','password']
},
};
// app/controller/admin.js
export default class AdminController extends Controller {
public async create() {
const { ctx } = this;
// 第一种校验方式
const valid = await ctx.validate('admin.user', ctx.request.query, 'create');
// 不传第三个参数默认校验全部规则
// const valid = await ctx.validate('admin.user', ctx.request.query);
if(!valid) return
ctx.body = "校验通过"
}
public async update() {
const { ctx,app } = this;
// 第二种校验方式
const valid = await ctx.validate(app.validate.admin.user, ctx.request.query, 'update');
// 不传第三个参数默认校验全部规则
// const valid = await ctx.validate(app.validate.admin.user, ctx.request.query);
if(!valid) return
ctx.body = "校验通过"
}
public async rule(){
const { ctx } = this;
// 第三种方式,自定义校验规则对象
const rule = {
id: [
{ required: true },
{ type: 'number', message: 'id 必须为数字' }
],
password: [
{ required: true },
{ type: 'string', message: 'password 必须为字符串'}
]
}
// 第三个参数必须传入rule,否则不生效
const valid = await ctx.validate(rule, ctx.request.query, 'rule');
if(!valid) return
ctx.body = "校验通过"
}
}
- 用法 this.ctx.validate(valid, query, scene)
- @param {string,object} valid validate 目录下的校验文件(不需要带上 validate 目录),或者直接传校验规则
- @param {object} query 需要校验的数据
- @param {string} scene 验证场景 默认情况下会校验所有的规则,如果指定了场景,且场景为
rule
, 第一个参数必须传入的是规则,其他场景可自定义。rule
为关键字不可被使用
-
我在使用egg-validate-plus的时候,虽然解决了egg-validate中自定义错误的功能, 但是创建的文件过于多,个人感觉比较麻烦, 所以我对当前的插件进行了一个二次的封装,提供了一些场景的功能。
-
增加了使用提示功能,优化使用体验
egg-validate-plus-next 版本 | egg 1.x |
---|---|
1.x | 😁 |
0.x | ❌ |
- async-validator 目前大部分的校验规则插件都使用了 async-validator, 包括前端的表单验证,egg-validate-plus-next 也不例外,感谢作者 yiminghe
本插件是基于egg-validate-plus做的一个二次的开发来满足个性化的定制 感谢作者temool
请到 egg-validate-plus-next 异步交流。