#joi
#joi
Вопрос:
Я пытаюсь реализовать условную проверку с помощью Joi. У меня есть конечная точка, которая может принимать либо:
{
from: 'abc'
}
или
{
type: 'some-type'
}
Если type
поле отсутствует, from
поле является обязательным, а если from
поле отсутствует, type
поле является обязательным. type
Может принимать только набор значений.
Я безуспешно попробовал следующий подход:
type: joi.alternatives().conditional('from', { is: joi.string().empty(), then: joi.string().required().valid('val1', 'val2'), otherwise: joi.optional() })
.messages({
'any.valid': 'type.not.supported.value',
'any.required': 'type.required'
}),
from: joi.alternatives().conditional('type', { is: joi.string().empty(), then: joi.required(), otherwise: joi.optional() })
.messages({
'any.valid': 'from.not.supported.value',
'any.required': 'from.required'
})
Спасибо за вашу помощь!
Тьерри
Ответ №1:
То, что вы описываете, звучит как or
ограничение.
… связь между ключами, где требуется один из одноранговых узлов (и допускается более одного)
Будет работать следующая схема:
joi.object().keys({
type: joi.string().valid('val1', 'val2'),
from: joi.string()
}).or('type', 'from');
Комментарии:
1. Похоже, это правильный подход. Проверит это. Большое спасибо, что указали на это!