2017-01-19 52 views
7

Anahtar adları olan bir nesnem var, bilmem mümkün değil - kullanıcı tarafından oluşturuluyor. Ancak, hangi değerlerin (anahtarlar) saklanacağını ve bunların (değerler) ISO dizileri olacağını biliyordum. Bu değerleri nasıl doğrularım?Joi nesne doğrulama: Bilinmeyen anahtar adları olan değerleri nasıl doğrularsınız?

key: Joi.string().min(2).max(25) 

Zaten -Joi API docs dayanıyordu çalıştı gelmiş Ne: Ben örnekten anlaşıldığı Ne

Another benefits of using Joi.object([schema]) instead of a plain JS object is >that you can set any options on the object like allowing unknown keys, e.g:

const schema = Joi.object({ arg: Joi.string().valid('firstname', 'lastname', 'title', 'company', 'jobtitle'), value: Joi.string(), }).pattern(/firstname|lastname/, Joi.string().min(2));

olmasıdır Ve isteğe, nasıl yani _uknown nesnenin anahtarlarını, doğrularım arg anahtar, Joi.object() öğesinin key ve value öğesinin value olduğunu gösterir.

My örnek:

campaign: Joi.object({ 
    arg: Joi.string().valid('unknown'), 
    value: Joi.date().iso(), 
}).pattern(/unknown/, Joi.string().min(2).max(25)) 

My girişi;

campaign: { g_ad_adwords: "2017-01-19T11:33:26.205Z" } 

Benim hatası:

"campaign" fails because ["g_ad_adwords" is not allowed]

cevap

8

bu deneyin. Temelde bir nesne campaign içinde herhangi bir tuşa kabul edeceğiz ve değer Ancak bu herhangi anahtarını maç olacak Joi.date().iso()

campaign: Joi.object().pattern(/^/, Joi.date().iso()) 

karşı doğrulamak gerekir. Normal ifadeyi biraz doldurmak suretiyle kısıtlayabilirsiniz. Örneğin. -Joi dokümanlarında the example İlişkin 2 ile 25 karakter

campaign: Joi.object().pattern(/\w{2,25}/, Joi.date().iso()) 

GÜNCELLEME

arasındaki tek kelime karakterleri, bunu test ama burada benim yorumum var değil. Ben

const schema = Joi.object({ 
    arg: Joi.string().valid('firstname', 'lastname', 'title', 'company', 'jobtitle'), 
    value: Joi.string(), 
}).pattern(/firstname|lastname/, Joi.string().min(2)); 

nesneler

arg 'ın değeri 'firstname', 'lastname', 'title', 'company', 'jobtitle' ve value biri olabilir nerede zorunluluk iki özellik arg ve value ihtiva doğrulamak için ... onlar verdik en basit örneği olmadığını anlayabilir sadece bir dizedir.

{ 
    arg: 'firstname', 
    value: 'john' 
} 

{ 
    arg: 'lastname', 
    value: 'smith' 
} 

{ 
    arg: 'jobtitle', 
    value: 'brewer' 
} 

Ancak o da nesne değerlerinin her ikisi, ikiden fazla karakterden oluşan bir dizedir özelliklerini firstname ve lastname sahip sağlayacaktır. Bu yüzden yukarıdaki örnekler geçerli tek bir nesneyle yoğunlaştırılabilir.

{ 
    firstname: 'john', 
    lastname: 'smith', 
    arg: 'jobtitle', 
    value: 'brewer' 
} 
İlgili konular