2016-04-14 29 views
1

belirli bir özelliği bir süredir okudum, ancak ne yapmak istediğimi şüpheliyim, ancak ben bir çözüm göremiyorum. ,Joi, nesne sadece bir nesne

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

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

cevap

2

Eğer special özelliğine sahip nesne dizideki ilk öğeyi sahip yapmayı kabul ediyorsanız:

şu Verilen

, nasıl tek thingspecial özelliği olduğunu doğrulamak array.ordered'u kullanabilir ve sonraki nesneler için ikinci bir şema tanımlayabilirsiniz. Dizideki ikinci öğe bir special özelliği olduğundan

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

değişken t doğrulama başarısız olur.

+0

Harika isimler! Bu diziyi tekrar okumanız gerekiyor! Joi aracılığıyla böyle karmaşık vakaları doğrulamak için basit bir yol olmadığından şüphe ettim; böylece Joi için uygun olmayan durumlar için başka bir doğrulama katmanı ekledim. – Merrick