joi
是hapi.js
自带的接口参数验证模块,以前开发hapijs项目感觉很好用,所以想要在其他项目中也加入使用,这里以一个koa项目
为例,这里是项目地址,项目还在完善中,之前的博文也有对他的介绍~~
安装joi
npm install joi --save
创建用于验证的schema
验证接口传递的参数前,需要先创建一个用于验证的schema
,就像mongoDB数据库的schema,定义参数的类型、字母大小写、是否为必须字段
等等~~~这里以上面链接中的koa项目中的账户注册接口为例:
const Joi = require('joi')
module.exports = {
signup: Joi.object().keys({
accountName: Joi.string().trim().min(1).required(),
accountPwd: Joi.string().trim().min(1).required()
})
}
一个账户需要包含accountName
、accountPwd
字段,字段类型都为string
,都为必须字段,前后不能有空格,且最少具有一个字符
对参数进行验证
由于参数传递是通过post
类型HTTP请求的body发送,所以直接对body对象进行验证就好:
const Joi = require('joi')
const {
signup
} = require('./validate.js')
const { error } = Joi.validate(ctx.body, signup, {
convert: false // 避免一些自动转换
})
if(error) {
// do something
}
如果验证成功,error的值应该是null
,整个对象如下所示:
如果验证失败,整个对象如下所示:
具体的验证过程,我在项目中封装了一个helper函数:
/**
* validate helper via Joi package
* @param {String} position the validate object position
* @returns {Function} return one function contain two arguments:checkObj --- the object need validate, schema --- joi validate schema;and return one message for info or false to show validate successful
*/
const joiValite = position => (checkObj, schema) => {
const { error } = Joi.validate(checkObj, schema, {
convert: false
})
if(error) {
const {
details: [
{
message
}
]
} = error
return `Please check your ${position}, ${message}`
}
return false
}
JJYY
关于schema
构建的具有内容,请查看他的API,或者有什么疑问可以留言告诉我~~~