I have the following schema:
var testSchema = Joi.object().keys({
    a: Joi.string(), 
    b: Joi.string(), 
    c: Joi.string().when('a', {'is': 'avalue', then: Joi.string().required()})
});
but I would like to add a condition on c field definition so that it is required when: 
a == 'avalue' AND b=='bvalue'
How can I do that?
You can concatenate two when rules:
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() }))
};
                        The answer by Gergo Erdosi didn't work with Joi 14.3.0, this resulted in an OR condition:
a === 'avalue' || b === 'bvalue'
The following worked for me:
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()
        }
      )
    }
  )
};
This results in a === 'avalue' && b === 'bvalue'
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With