HapiJS / Joi Разрешить поле быть строкой или объектом с конкретными ключами - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь проверить POST-запрос, где title может быть String или Object с языковыми ключами и значениями.Пример:

{
    title: 'Chicken',
    ...
}
//OR
{
    title: {
        en_US: 'Chicken',
        de_DE: 'Hähnchen'
    }
    ...
}

И с Джои я пытаюсь проверить так:

{
   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 с тем же полем?

1 Ответ

0 голосов
/ 29 мая 2018

Взгляните на использование .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()
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...