2017-01-19 7 views
7

मेरे पास उन प्रमुख नामों वाला ऑब्जेक्ट है जिन्हें मैं संभवतः नहीं जानता - वे उपयोगकर्ता द्वारा बनाए जाते हैं। हालांकि मुझे पता है कि वे कौन से मूल्य (कुंजी) स्टोर करने जा रहे हैं, और वे (मान) आईएसओ स्ट्रिंग होने जा रहे हैं। मैं उन मानों को कैसे मान्य करूं?जोई ऑब्जेक्ट सत्यापन: अज्ञात कुंजी नामों वाले मानों को कैसे सत्यापित करें?

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

क्या मैं पहले से ही की कोशिश की जॉय एपीआई डॉक्स पर आधारित था है:

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

मैं उदाहरण से क्या समझ गया कि है और, वैकल्पिक, मैं कैसे uknown वस्तु की चाबियाँ, यानी मान्य है arg कुंजी Joi.object() के key का प्रतिनिधित्व करता है, और value इसका प्रतिनिधित्व करता है value

मेरे उदाहरण:

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

मेरे इनपुट;

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

मेरे त्रुटि:

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

उत्तर

8

इस प्रयास करें। यह मूल रूप से एक वस्तु campaign के भीतर किसी भी कुंजी को स्वीकार करेंगे और मूल्य Joi.date().iso()

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

सामने सत्यापित करना होगा हालांकि यह किसी भी कुंजी से मेल खाएगी। आप इसे रेगेक्स को थोड़ी सी पैडिंग करके प्रतिबंधित कर सकते हैं। जैसे जॉय डॉक्स में the example के बारे में 2 और 25 वर्ण

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

अद्यतन

के बीच केवल शब्द वर्ण, मैं यह परीक्षण नहीं किया, लेकिन यहाँ मेरी व्याख्या है। मैं समझ सकता है कि यह सबसे सरल उदाहरण वे दे दिया है हो सकता है नहीं है ...

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

वस्तुओं को मान्य करने के जहां arg के मूल्य 'firstname', 'lastname', 'title', 'company', 'jobtitle' और value से एक हो सकता चाहिए दो विशेषताओं arg और value शामिल बस एक स्ट्रिंग है।

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

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

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

लेकिन यह भी वस्तु गुण firstname और lastname जहां उनके मूल्यों के दोनों दो से अधिक अक्षर के साथ एक स्ट्रिंग है है करने के लिए अनुमति देगा। तो उपरोक्त उदाहरणों को एक वैध वस्तु में संघनित किया जा सकता है।

{ 
    firstname: 'john', 
    lastname: 'smith', 
    arg: 'jobtitle', 
    value: 'brewer' 
} 
संबंधित मुद्दे