如何忽略Joi模式中的字段之一?

问题描述

我为用户使用以下Joi模式:

const userRules = Joi.object({
    name: Joi.string().pattern(new RegExp('^[A-Za-zÁÉÍÓÚáéíóúãõÃÕâêôÂÊÔ ]+$')).required(),email: Joi.string().email().required(),password: Joi.string().min(8).max(40).required()
});

但是出于身份验证的目的,我只想验证emailpassword,而忽略name。不必创建其他架构就可以做到这一点吗?

解决方法

这将忽略name

const userRules = Joi.object({
    email: Joi.string().email().required(),password: Joi.string().min(8).max(40).required()
})
.options({allowUnknown: true});
,

您可以使用 Joi.fork() 从基础架构创建派生架构。

const userRules = Joi.object({
    name: Joi.string().pattern(new RegExp('^[A-Za-zÁÉÍÓÚáéíóúãõÃÕâêôÂÊÔ ]+$')).required(),email: Joi.string().email().required(),password: Joi.string().min(8).max(40).required()
});
const authSchema = userRules.fork(['name'],(schema) => schema.optional())

现在,在 authSchema 中,name 属性是可选的,可以忽略。