2016-04-14 11 views
1

&の間に私はJoi API docを読んでいましたが、私は何をしたいのかと思っています。次を考えるJoiはオブジェクトの配列を検証して、特定のオブジェクトのみが特定のプロパティを持つようにします。

は、どのように私は一つだけthingspecial性質を持っていることを検証することができます

let thing = { 
    name: Joi.string(), 
    special: Joi.boolean(), 
} 

let manyThings = { 
    things: Joi.array().items(thing), 
} 

答えて

2

あなたは配列の最初の項目は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が検証に失敗します。

+0

素晴らしい名前です!完全にそのシリーズを再読みする必要があります!私はJoiを介してこのような複雑なケースを検証する簡単な方法はないと思った。したがって、私はJoiには適していないケースに対して別のバリデーションレイヤーを追加しました。 – Merrick

関連する問題