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,整个对象如下所示:
这里写图片描述
如果验证失败,整个对象如下所示:
这里写图片描述

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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Joi 是一个 Node.js 模块,用于验证 JavaScript 对象的结构。它提供了一组易于使用的功能来构建强大的验证规则。要实现文件上传验证,可以使用 Joi 的 `file()` 方法来定义文件上传的验证规则。 以下是一个示例代码,演示如何使用 Joi验证文件上传: ```javascript const Joi = require('joi'); // 定义文件上传的验证规则 const fileValidationSchema = Joi.object({ file: Joi.object({ name: Joi.string().required(), size: Joi.number().max(1000000).required(), mimetype: Joi.string().valid('image/png', 'image/jpeg', 'image/jpg').required() }).required() }); // 处理文件上传请求 app.post('/upload', (req, res) => { // 验证上传的文件是否符合规则 const { error } = fileValidationSchema.validate(req.files); if (error) { // 如果文件不符合规则,返回错误信息 res.status(400).send(error.details[0].message); } else { // 如果文件符合规则,上传文件 // ... } }); ``` 以上代码中,`fileValidationSchema` 定义了文件上传的验证规则。在 `fileValidationSchema` 中,我们定义了 `file` 对象,包含了文件的名称、大小和 MIME 类型。我们使用 `required()` 方法来指定这些属性是必需的,并使用 `max()` 和 `valid()` 方法来限制文件的大小和 MIME 类型。 在处理文件上传请求时,我们使用 `validate()` 方法来验证上传的文件是否符合规则。如果文件不符合规则,我们返回错误信息;否则,我们将文件上传到服务器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值