Джой, как проверить одно из двух полей не должно быть пустым - PullRequest
0 голосов
/ 24 мая 2018

У меня есть следующая схема проверки и пример данных.

var schema = Joi.alternatives().try(
  Joi.object().keys({
    searchTerm: Joi.string().trim().min(3).label('Search Term').options({ language: { any: { empty: 'should not be empty' } } }),
    location: Joi.string().allow(''),
    searchType: Joi.string().valid('people')
  }),
  Joi.object().keys({
    searchTerm: Joi.string().allow(''),
    location: Joi.string().trim().min(3).label('Location').options({ language: { any: { empty: 'should not be empty' } } }),
    searchType: Joi.string().valid('people')
  })
);

Пример данных:

{searchTerm: "", searchType: "people", location: ""}

Не должен пройти и показать сообщение Please enter either search term or location. Make sure it contains 3 characters at least

{searchTerm: "as", searchType: "people", location: ""} 

Не должен проходить и показывать сообщение Search term must contain 3 characters at least

{searchTerm: "test", searchType: "people", location: ""}  // Should pass

Моя схема проверки показывает оба сообщения в ситуациях сбоя

1 Ответ

0 голосов
/ 30 мая 2018

Вы можете упростить вашу схему joi до этого

const schema = Joi.object().keys({
  searchTerm: Joi.string().trim().min(3),
  location: Joi.string().allow(''),
  searchType: Joi.string().valid('people'),
}).or('searchTerm', 'location').error(new Error('Please enter either search term or location. Make sure it contains 3 characters at least'));

Однако это не будет соответствовать вашему второму условию (Search term must contain 3 characters at least), поскольку может быть только одно сообщение об ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...