Можно ли потребовать хотя бы одно поле из набора определенных полей?

Учитывая такое определение:

const querySchema = joi.object({
  one: joi.string().min(1).max(255),
  two: joi.string().min(1).max(255),
  three: joi.string().min(1).max(255),
});

Есть ли способ потребовать хотя бы одно из этих полей? Мне все равно, какой.

Примечание: решение для этого SO question мне не подходит, так как у меня есть 7 полей, и они могут расти, поэтому выполнение всех возможных комбинаций недопустимо.

Не удалось найти методы в Joi API Reference, которые могут быть полезно для этого варианта использования.

Любая помощь приветствуется.


person FLC    schedule 29.03.2017    source источник


Ответы (2)


Если вам действительно все равно, какой из них требуется, вы можете просто убедиться, что в объекте есть хотя бы один ключ, используя object().min(1).

const querySchema = joi.object({
    one: joi.string().min(1).max(255),
    two: joi.string().min(1).max(255),
    three: joi.string().min(1).max(255),
}).min(1);

Требуется хотя бы один ключ (one, two, three). Ключи с именами, отличными от этих трех, будут отклонены.

person Ankh    schedule 30.03.2017

Нашел другой способ сделать это, кроме предложенного @Ankh, в документации но я не мог найти его раньше:

const schema = joi.object({
   a: joi.number(),
   b: joi.number(),
}).or('a', 'b');

Этот метод хорош, если вам нужен определенный набор ключей, в то время как метод @Ankh лучше, когда требование точное, как я назвал этот вопрос, и у вас много ключей, поэтому я выбираю его ответ вместо моего как правильный.

Просто хотел оставить здесь другой способ сделать это.

person FLC    schedule 30.03.2017
comment
Ссылка на документацию устарела - этого якоря больше нет. Это приведет вас к этому разделу документации: github. com/sideway/joi/blob/master/API.md#objectorpeers-options - person joecullin; 30.07.2021