2016-04-14 5 views

Antwort

2

Wenn Sie in dem Feld das erste Element mit, die das Objekt in Ordnung sind, die die special Eigenschaft hat, Sie können array.ordered verwenden und ein zweites Schema für die nachfolgenden Objekte definieren.

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)); 

Die Variable t wird Validierung fehlschlagen, da das zweite Element im Array eine special Eigenschaft hat.

+0

tolle Namen! Ich muss diese Serie unbedingt noch einmal lesen! Ich vermutete, dass es keine einfache Möglichkeit gab, komplexe Fälle wie diese über Joi zu validieren; Daher habe ich eine weitere Validierungsschicht für Fälle hinzugefügt, die nicht für Joi geeignet sind. – Merrick