joi v17.4.1,仅验证提及或必填字段,所有其他参数应为选项

问题描述

我正在使用 joi v17.4.1 来验证 post 输入正文参数,但我只想将所需的参数放入 JOi Schema 中 例如,对于注册,我只需要用户名、电子邮件和密码是强制性的,所有其他参数都是选项。 所以我正在创建 joi 架构,如:

const registerUserValidator = async (body) => {
const schema = Joi.object().keys({
    username: Joi.string()
        .alphanum()
        .min(3)
        .max(30)
        .required(),password: Joi.string()
        .pattern(new RegExp('^[a-zA-Z0-9]{3,30}$')),repeat_password: Joi.ref('password'),email: Joi.string()
        .email({ minDomainSegments: 2,tlds: { allow: ['com','net'] } })
})

用户可以发帖:

{
    "username":"myuserName","name":"Test Name","email":"test@email.com","phone":"00000000","password":"12345","repeat_password":"12345",}

我收到错误

{
    "messeage": "\"name\" is not allowed"
}

>请帮忙

解决方法

只需使用 Joi.allow() 添加其他字段,如下所示:

const registerUserValidator = async (body) => {
const schema = Joi.object().keys({
    username: Joi.string()
        .alphanum()
        .min(3)
        .max(30)
        .required(),password: Joi.string()
        .pattern(new RegExp('^[a-zA-Z0-9]{3,30}$')),repeat_password: Joi.ref('password'),email: Joi.string()
        .email({ minDomainSegments: 2,tlds: { allow: ['com','net'] } }),//add this in your code
    phone:Joi.allow(),name:Joi.allow()
})