Множественные условия проверки Joi

У меня такая схема:

var testSchema = Joi.object().keys({
    a: Joi.string(), 
    b: Joi.string(), 
    c: Joi.string().when('a', {'is': 'avalue', then: Joi.string().required()})
});

но я хотел бы добавить условие для определения поля c, чтобы оно требовалось, когда:

a == 'avalue' AND b=='bvalue'

Как я могу это сделать?


person user2468170    schedule 22.10.2014    source источник


Ответы (2)


Вы можете объединить два when правила:

var schema = {
    a: Joi.string(),
    b: Joi.string(),
    c: Joi.string().when('a', { is: 'avalue', then: Joi.string().required() }).concat(Joi.string().when('b', { is: 'bvalue', then: Joi.string().required() }))
};
person Gergo Erdosi    schedule 22.10.2014
comment
Что делать, если я хочу сгруппировать ценности. например, когда берет одно из набора значений и устанавливает правило проверки? - person cdaiga; 20.05.2020
comment
Я хочу того же. Необходимо проверить, имеет ли ключ значение в массиве. - person cegprakash; 14.07.2020

Ответ Герго Эрдози не сработал с Джои 14.3.0, это привело к OR условию:

a === 'avalue' || b === 'bvalue'

Для меня сработало следующее:

var schema = {
  a: Joi.string(),
  b: Joi.string(),
  c: Joi.string().when(
    'a', {
      is: 'avalue',
      then: Joi.when(
        'b', {
          is: 'bvalue',
          then: Joi.string().required()
        }
      )
    }
  )
};

Это приводит к a === 'avalue' && b === 'bvalue'

person Simian    schedule 06.12.2018
comment
да, я думаю, это тоже лучший синтаксис - person Kat Lim Ruiz; 20.02.2021