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 части:
- Обрабатывайте пустую строку для пароля так же, как и отсутствие пароля. Смотрите any.empty(...)
- Требовать ключи всякий раз, когда присутствует другой пароль. Смотрите 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']);