Условные заголовки с использованием 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
,