Join Validation-如果不满足条件,则不需要字段



我正在nodeJs中编写一个更新端点。如果选中某些标志,我想确保不允许使用其他字段。

all_restaurant: Joi.boolean().required(),
merchant_id: Joi.when('all_restaurant',{'is':false, 
then: Joi.string().required(), otherwise:Joi.disallow()})

如果all_restaurant为true,那么当用户尝试包含任何merchant_id时,我需要抛出一个错误,但它仍然允许我更新。我试着在字段后面和顶级中使用strict((,但什么都不起作用。有什么办法做到这一点吗?

您可以使用Join.forbden而不是Join.disallow:

const schema = Joi.object({
all_restaurant: Joi.boolean().required(),
merchant_id: Joi.string().when('all_restaurant', {
is: false, 
then: Joi.required(), 
otherwise: Joi.forbidden()
})
})

顾名思义,禁止将钥匙标记为禁止。

这是@shubham verma提出的一个变体(根据上面的答案提出(。

假设all_resturant是一个具有有效字符串的数组:'A''B''C':

all_resturant: Joi.array().items(Joi.string().valid('A', 'B', 'C'))

只有当all_resturant[0]等于"A"时,我们才能使merchant_id为必需?

当与.结合使用时,我们仍然可以使用.订购:

Joi.object({
all_resturant: Joi.array().items(Joi.string().valid('A', 'B', 'C')),
merchant_id: Joi.string()
}).when(Joi.object({ all_resturant: Joi.array().ordered(Joi.string().valid('A')).items(Joi.string()) }).unknown(), {
then: Joi.object({
merchant_id: Joi.required()
})
})

Joi.array().ordered(Joi.string().valid('A')).items(Joi.string()(意味着数组必须具有作为"A"的第一个项和作为一个字符串的一个或多个后续项。

以下是一些案例:

{ all_resturant: ["A", "B", "A", "C"] }//merchant_id需要

{ all_resturant: ["C", "B", "A", "C"] }//通过

{ all_resturant: ["C"] }//通过

{ all_resturant: ["A"] }//merchant_id需要

{ all_resturant: ["A"], merchant_id: '123' }//通过

相关内容

  • 没有找到相关文章

最新更新