あなたは配列の最初の項目はspecial
プロパティを持つオブジェクトであると大丈夫だ場合は、を使用して、後続のオブジェクトの2番目のスキーマを定義することができます。
var joi = require('joi');
var thingSchmea = joi.object().keys({
name: joi.string().required(),
special: joi.boolean().required()
});
var thingWithoutSpecialSchema = joi.object().keys({
name: joi.string().required()
});
var manyThingsSchema = joi.array().ordered(thingSchmea.required()).items(thingWithoutSpecialSchema);
var t = [
{
name: 'cuthbert',
special: true
},
{
name: 'roland',
special: true
},
{
name: 'jake'
},
{
name: 'susan'
}
];
var result = joi.validate(t, manyThingsSchema);
console.log(JSON.stringify(result, null, 2));
アレイの2番目の項目はspecial
性質を持っているので、変数t
が検証に失敗します。
素晴らしい名前です!完全にそのシリーズを再読みする必要があります!私はJoiを介してこのような複雑なケースを検証する簡単な方法はないと思った。したがって、私はJoiには適していないケースに対して別のバリデーションレイヤーを追加しました。 – Merrick