HapiJS/Joi 允许字段为具有特定键的字符串或对象

Com*_*zza 4 node.js joi

我正在尝试验证 POST 请求,其中 POST 请求title可以是带有语言键和值的字符串对象。例子:

{
    title: 'Chicken',
    ...
}
//OR
{
    title: {
        en_US: 'Chicken',
        de_DE: 'Hähnchen'
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

和 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()
    }),
...
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试验证时出现错误AssertionError [ERR_ASSERTION]: Item cannot come after itself: title(title) 有没有办法使用when相同的字段?

Ank*_*nkh 15

看看 using.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()
})
Run Code Online (Sandbox Code Playgroud)