版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_37695006/article/details/83502814
刚刚接触egg没多久,一直使用egg自带的validate做校验,emmm~用过的都知道,之前用hapi的时候感觉joi用着很舒服,然后在网上找了一个插件egg-joi。
我的项目结构
安装依赖
npm i egg-joi --save
引入插件 app/config/plugin.js
exports.joi = {
enable: true,
package: 'egg-joi',
};
配置插件 app/config/config.default.js
exports.joi = {
options: {},
locale: {
'zh-cn': {}
},
throw: true, # 校验出错是是否自动抛出错误
throwHandle: (error) => { return error; }, # throw 为 true 时对抛出的错误做格式化处理
errorHandle: (error) => { return error; }, # throw 为 false 时错误会作为结果返回,默认 { error, value },此函数可以对错误做格式化
resultHandle: (result) => { return result; } # 对返回结果做处理的函数,默认返回结果 { error, value }
};
例子
app/validator/module
module.exports = app => {
const Joi = app.Joi;
return {
getData: Joi.object().keys({
userid: Joi.string().required(),
id: Joi.number(),
typeid: Joi.number(),
name: Joi.string(),
state: Joi.string(),
pageSize: Joi.number(),
pageIndex: Joi.number(),
})
}
};
app/controller/moduleControl
async getData() {
const ctx = this.ctx;
const params = ctx.query;
const validator = this.app.validator;
console.log("getData-params===", params);
try {
ctx.validate(validator.module.getData, params);
const data = await ctx.service.moduleServe.getData(params);
ctx.body = JSON.stringify(data);
} catch (err) {
ctx.body = JSON.stringify(err);
}
}