egg 版 joi 插件. 支持params、query、body 参数校验,更友好的 error 提示。需要更新请提issues
egg-validate-joi 版本 | egg 2.x |
---|---|
2.x | 😁 |
1.x | ❌ |
0.x | ❌ |
$ npm i egg-validate-joi --save
// config/plugin.js
exports.validateJoi = {
enable: true,
package: 'egg-validate-joi',
};
// {app_root}/config/config.default.js
exports.validateJoi = {
options: {
abortEarly: false, // when true, stops validation on the first error, otherwise returns all the errors found. Defaults to true.
},
};
or
config.validateJoi = {
options: {
abortEarly: false,
},
};
请到 config/config.default.js 查看详细配置项说明。
// {app_root}/app/router.js
module.exports = app => {
const { router, controller } = app;
router.post('/', controller.home.create);
router.post('/:id/topics', controller.home.createTopic);
};
// {app_root}/app/controller/home.js
async create() {
const { ctx, app } = this;
const { Joi } = app;
const errors = ctx.validateJoi({
body: {
id: Joi.string().guid({ version: [ 'uuidv4' ] }).required(),
name: Joi.string().required(),
email: Joi.string().email().required(),
},
});
if (errors) console.log(errors);
// if errors exist, errors is object, for example:
// errors: {
// 'body.id': '"id" must be a valid GUID',
// 'body.name': '"name" must be a string',
// 'body.email': '"email" must be a valid email',
// }
}
async createTopic() {
const { ctx, app } = this;
const { Joi } = app;
const errors = ctx.validateJoi({
params: {
id: Joi.string().guid({ version: [ 'uuidv4' ] }).required(),
},
body: {
topicId: Joi.string().guid({ version: [ 'uuidv4' ] }).required(),
name: Joi.string().required(),
},
});
if (errors) console.log(errors);
// if errors exist, errors is object, for example:
// errors: {
// 'params.id': '"id" must be a valid GUID',
// 'body.topicId': '"id" must be a valid GUID',
// 'body.name': '"name" must be a string',
// }
}
请到 egg issues 异步交流。