2016-05-12 13 views
0

から有効なキーを定義私はこのような攘夷スキーマを有する:攘夷スキーマ検証:Joi.objectアレイ

var schema = Joi.object().keys({ filter: Joi.object({ }) }) 

そしてIはvalidKeysと呼ばれる別の配列にフィルタオブジェクトのすべての有効なキーを持っています。

私は、フィルタオブジェクトとvalidKeysを参照したいと思います。それ以外の場合は、次のように許容値をハードコードする必要があります。

var schema = Joi.object().keys({ filter: Joi.object({ allowed1:Joi.string(), allowed2: Joi.string(), ... }) }) 

私はしたくないです。これはJoiやその他のJavascriptツールで可能ですか?

答えて

0

validkeysの配列は本当にわかりませんが、フィルタースキーマを最初に設定してから最後のスキーマを設定すると、キーを繰り返し処理してフィルタスキーマに動的に追加できますすべてが文字列であるはずです)。

const joi = require('joi'); 

// not sure what valid key structure is like.. 
const validkeys = ['allowed1', 'allowed2', 'allowed3']; 

// set up filter schema first. 
let filterschema = {}; 

for (let i = 0; i < validkeys.length; i++) { 
    filterschema[validkeys[i]] = joi.string(); 
} 

// set up the final schema 
let finalschema = joi.object().keys({ 
    filter: filterschema 
}); 

// test 
let testobj = { 
    filter: { 
     allowed1: 'cuthbert', 
     allowed2: 'susan', 
     allowed5: 'jake' // should NOT be allowed. 
    } 
}; 

let result = joi.validate(testobj, finalschema); 

// should fail because key allowed5 isn't defined in filter schema. 
console.log(JSON.stringify(result, null, 2)); 
関連する問題