2017-01-19 16 views
7

私はおそらく知ることのできないキー名を持つオブジェクトを持っています。それらはユーザーによって作成されています。しかし、私は彼ら(キー)がどのような値を格納しようとしているのか分かり、ISOストリングになるでしょう。これらの値を検証するにはどうすればよいですか?そして、任意で、どのように私はすなわち、にUnknownオブジェクトのキーを検証します:Joiオブジェクトの検証:未知のキー名で値を検証する方法?

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

私はすでに攘夷のAPIドキュメントに基づいていた試してみました何:

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

私は例から理解することはということですargJoi.object()keyを表し、valuevalueを表します。

私の例:

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

UPDATE

間の唯一の単語文字は、私はそれをテストしたが、ここで私の解釈ですしていません。私は必見を検証するためのオブジェクトがargの値は'firstname', 'lastname', 'title', 'company', 'jobtitle'の一つとvalueことができる2つの属性argvalueを含んで...それは、彼らが与えている可能性が最も簡単な例ではないということ

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', 
    value: 'john' 
} 

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

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

は、しかし、それはまた、オブジェクトがそれらの値の両方が二つ以上の文字を文字列であり、属性firstnamelastnameを持つことができるようになります。したがって、上記の例を1つの有効なオブジェクトに集約することができます。

{ 
    firstname: 'john', 
    lastname: 'smith', 
    arg: 'jobtitle', 
    value: 'brewer' 
} 
関連する問題