1,使用
安装egg-validate
yarn add egg-validate
2,配置
先启用:
config/plugin.ts
const plugin: EggPlugin = {
// ...
validate: {
enable: true,
package: 'egg-validate',
},
// ...
};
export default plugin;
再配置:
config/config.default.ts
export default (appInfo: EggAppInfo) => {
const config = {} as PowerPartial<EggAppConfig>;
// ...
config.validate = {
convert: true,
widelyUndefined:true
};
// ...
};
其配置项为 node-modules/parameter 的所有可用配置项,因为该插件其实就是后者的 Egg.js 封装。
- convert会对入参进行转换,建议开启。举个例子,使用表单中默认的 submit 类型按钮提交表单时,提交过来的往往是序列化后的字符串,那些期望是数字类型的字段就会始终验证不过。而开启此项后,会对入参按希望的类型进行转换。
widelyUndefined
开启后,会把空字符串,NaN
,null
这些转成undefined
,将这些异常的数据进行了统一,方便后续处理。
3,自定义校验规则:
app/validate/user.ts
module.exports = app => {
const { validator } = app;
// 校验用户名是否正确
validator.addRule('userName', (rule, value) => {
console.log('校验用户名', rule, value);
if (/^\d+$/.test(value)) {
return '用户名应该是字符串';
} else if (value.length < 6 || value.length > 20) {
return ('用户名的长度应该在6-20之间');
}
});
};
4,启动时载入规则
app.ts
const path = require('path');
module.exports = app => {
...
// 导入验证规则
const directory = path.join(app.config.baseDir, 'app/validate');
app.loader.loadToApp(directory, 'validate');
};
5,使用
在controller中使用刚才自定义的方法
public async create() {
const { ctx } = this;
console.log(ctx.request.body);
try {
ctx.validate({ name: 'userName' });
} catch (error) {
ctx.body = error;
return;
}
ctx.body = `创建:${ctx.params.id || 1}`;
}
如果出现以下结果,说明验证可行