2017-01-09 6 views
0

私はペイロードを単一のJSオブジェクトとして受け取ることができるポストコールと、それをdbに保存するオブジェクトの配列を持っています。そのようなペイロードに対して検証するためのスキーマの作成方法Hapi-Joiは、オブジェクトの配列か単純なJavascriptオブジェクトのペイロードを検証しますか?

JSは、あなたがJoi.alternatives()を使ってこれを実現することができます

{ 
    label: 'label', 
    key: 'key', 
    help_text: 'text' 
} 

それとも

[ 
{ 
    label: 'label1', 
    key: 'key1', 
    help_text:'text1' 
}, 
{ 
    label: 'label2', 
    key: 'key2', 
    help_text:'text2' 
} 
] 
+0

最初にJSONから解析します。 'JSON.parse(jsObj)';それが配列かオブジェクトかどうかのチェックよりも。注意してください、配列はオブジェクトでもあります。配列の場合、Prototype: 'Array.isArray(arr)'を使うことができます。 'value!== null &&(typeof value === 'undefined'? 'undefined':_typeof(value))=== 'オブジェクト'; ' – DomeTune

+0

ありがとう@DominikNoll私はそのロジックを持っていますすでに私のハンドラでは、私はすべての検証部分を別々のファイルに分けています。 –

+0

Mh、私はあなたの質問を得るよりも...あなたはどのようにルートの名前を知りたいですか?または、関数内でJSオブジェクトを処理する方法を知りたいですか? @kailash yogeshwar – DomeTune

答えて

5

オブジェクト。ここに実例があります:

const joi = require('joi'); 

var objectSchema = joi.object().keys({ 
    label: joi.string().required(), 
    key: joi.string().required(), 
    help_text: joi.string().required() 
}).unknown(false); 

var arraySchema = joi.array().items(objectSchema); 

var altSchema = joi.alternatives().try(objectSchema, arraySchema); 

var objTest = {label: 'cuthbert', key: 'something', help_text: 'helping!'}; 

var arrTest = [ 
    objTest 
]; 

var failingArrTest = [ 
    { 
     unknownProperty: 'Jake' 
    } 
]; 

var result = joi.validate(objTest, altSchema); 

var resultArrTest = joi.validate(arrTest, altSchema); 

var resultFailingArrTest = joi.validate(failingArrTest, altSchema); 

console.log(result); 

console.log(resultArrTest); 

console.log(resultFailingArrTest); 
+0

私は最初にそれをテストします –

関連する問題