0

次のような Joi スキーマがあります。

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

次に、validKeys という別の配列にフィルター オブジェクトのすべての有効なキーがあります。

filter-object で validKeys を参照したいと思います。そうしないと、次のように許可された値をハードコーディングする必要があります。

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

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

4

1 に答える 1

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));
于 2016-05-13T15:25:52.717 に答える