eggJS egg-joi优雅的参数校验

版权声明:本文为博主原创文章,未经博主允许不得转载。 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);
	}
    }

 

猜你喜欢

转载自blog.csdn.net/weixin_37695006/article/details/83502814