Условная проверка с помощью joi

#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. Похоже, это правильный подход. Проверит это. Большое спасибо, что указали на это!