我尝试验证POST请求,其中title
可以是字符串,也可以是对象,其中包含语言键和值。例如:
{
title: 'Chicken',
...
}
//OR
{
title: {
en_US: 'Chicken',
de_DE: 'Hähnchen'
}
...
}
对于Joi,我试图像这样验证:
{
title: Joi.any().when('title', {
is: Joi.string(),
then: Joi.string().required(),
otherwise: Joi.object().keys({
en_US: Joi.string().required(),
lt_LT: Joi.string()
}).required()
}),
...
}
然而,当我尝试验证时,我收到错误AssertionError [ERR_ASSERTION]: Item cannot come after itself: title(title)
有没有办法将when
用于相同的字段?
答案 0 :(得分:2)
在这种情况下,请查看使用.alternatives()
而不是.when()
。当您的键的值依赖于同一对象中的另一个键的值时,最好使用.when()
。在您的场景中,我们只需要担心一键。
使用.alternatives()
的可能解决方案如下:
Joi.object().keys({
title: Joi.alternatives(
Joi.string(),
Joi.object().keys({
en_US: Joi.string().required(),
lt_LT: Joi.string()
})
).required()
})