Условные заголовки с использованием Joi

Я использую Joi для проверки заголовков HTTP-запроса. У меня есть два заголовка. Если FOO присутствует, то требуется BAR, в противном случае BAR является необязательным. Это работает:

'FOO': Joi.string().optional(),
'BAR': Joi.string().when('FOO', { is: Joi.not(''), then: Joi.required() })

Если я хочу, чтобы FOO был числовым значением, тогда это работает:

'FOO': Joi.number().integer().default(0).optional(),
'BAR': Joi.string().when('FOO', { is: Joi.number().min(1), then: Joi.required() })

Однако, если я опускаю значение по умолчанию (0), то Джой думает, что BAR требуется, когда FOO отсутствует. Это правильное поведение? Есть ли лучший способ справиться с этим?

1 ответ

Это можно сделать намного проще, используя .with(), Рассмотрим следующую схему:

const schema = Joi.object().keys({
    FOO: Joi.number().default(0).min(1),
    BAR: Joi.string()
}).with('FOO', 'BAR');

.with() сил BAR требуется только тогда, когда FOO настоящее.

Также похоже на ваш пример это также обеспечит FOO должно быть больше или равно 1 если это действительно в полезной нагрузке, в противном случае Джой по умолчанию будет 0,

Другие вопросы по тегам