Я пытаюсь проверить некоторые данные с помощью Joi. Тем не менее, я хочу использовать значение по умолчанию, когда предоставленное значение является недействительным. Моя текущая проверка выглядит так:

field: Joi.string()
    .optional()
    .valid('a', 'b', 'c', 'd')
    .default('a', { invalid: true }),

Поэтому, когда я получаю, например, y , возникает ошибка проверки и значение по умолчанию не используется. Любая помощь оценивается

2
lejhbah 16 Авг 2019 в 12:57

2 ответа

Лучший ответ

Вы можете использовать alternatives.try(schemas), чтобы добиться того, что вы хочу с помощью этой схемы:

  const schema = Joi.object().keys({
    field:  Joi.alternatives().try([
      Joi.string().valid('a', 'b', 'c', 'd'),
      Joi.empty(Joi.any())
    ]).default('a')
  })

Вы также сможете достичь этого с помощью any.failover(value) доступно на joi 16.0.0 (еще не выпущено).

2
soltex 16 Авг 2019 в 11:55

Альтернативный ответ @soltex:

default работает только если значение не установлено. Таким образом, вы можете сбросить значение с помощью empty. (В основном это то, что я использую, не знаю о отрицательных точках):

const schema = Joi.object().keys({
    field: Joi.string().empty(Joi.not(['a', 'b', 'c', 'd'])).default('a')
})
1
Aritra Chakraborty 16 Авг 2019 в 12:11