hapijs Joi, когда одно поле не пусто, должны быть заполнены другие поля

Если пароль не пустой, значит, нужно заполнить два других поля. В некоторых случаях пароль будет присутствовать, но он будет нулевым, в этом случае два других поля не требуются. Я пытался с существовать () и! Empty(), но это не работает.

password : joi.string().trim().optional().description('Password'), device_type : joi.when('password', {is: (joi.exist() && !joi.empty()), then: joi.number().required().valid(validation.user.device_type.allowOnly).description('Device type')}), device_token : joi.when('password', {is: joi.exist(), then: joi.string().trim().required().description('Device token')})

Но это не сработает

1 ответ

Решение

На ваш вопрос есть 2 части:

  1. Обрабатывайте пустую строку для пароля так же, как и отсутствие пароля. Смотрите any.empty(...)
  2. Требовать ключи всякий раз, когда присутствует другой пароль. Смотрите object.with(...)

Соедините их вместе и упростите вашу схему для ясности (обратите внимание, что все ключи являются необязательными по умолчанию)

const schema = joi.object({
    password      : joi.string().trim().empty(''),
    device_type   : joi.number(),
    device_token  : joi.string().trim()
}).with('password', ['device_type', 'device_token']);
Другие вопросы по тегам