joi作接口参数验证

joihapi.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()
    })
}

一个账户需要包含accountNameaccountPwd字段,字段类型都为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,整个对象如下所示:
这里写图片描述
如果验证失败,整个对象如下所示:
joi作接口参数验证_第1张图片

具体的验证过程,我在项目中封装了一个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,或者有什么疑问可以留言告诉我~~~

你可能感兴趣的:(【NodeJs】)