簡體   English   中英

Joi 模式驗證:Joi.object 從數組中定義有效鍵

[英]Joi schema validation: Joi.object define valid keys from an array

我有一個這樣的 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 工具可以做到這一點嗎?

我不確定您的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));

我是這樣做的:

{
  filter: Joi.object().unknown(false).required().keys(['allowed1', 'allowed2', 'allowed3'].reduce((acc, val) => {
    acc[val] = Joi.any()

    return acc
  }, {}))
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM