web-dev-qa-db-ja.com

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'

どうやってやるの?

17
user2468170

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() }))
};
22
Gergo Erdosi

Gergo Erdosiの答えは、Joiではうまくいきませんでした14.3.0、これは私にORconditionを与えました:

a === 'avalue' OR 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' AND b === 'bvalue'

5
Simian