首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Joi模式验证: Joi.object定义数组中的有效键

Joi模式验证: Joi.object定义数组中的有效键
EN

Stack Overflow用户
提问于 2016-05-12 20:37:21
回答 1查看 1.3K关注 0票数 0

我有一个如下的Joi模式:

代码语言:javascript
复制
var schema = Joi.object().keys({ filter: Joi.object({ }) })

然后,我将filter-object的所有有效键放在一个名为validKeys的单独数组中。

我想引用带有filter-object的validKeys。否则我将不得不硬编码允许的值,如下所示:

代码语言:javascript
复制
var schema = Joi.object().keys({ filter: Joi.object({ allowed1:Joi.string(), allowed2: Joi.string(), ... }) }) 

但我不想这么做。使用Joi或其他Javascript工具可以做到吗?

EN

回答 1

Stack Overflow用户

发布于 2016-05-13 23:25:53

我不太确定您的validkeys数组是什么样子的,但是如果您首先设置了筛选器模式,然后设置了最终模式,则可以遍历键并动态地将它们添加到筛选器模式中(假设它们都是字符串)。

代码语言:javascript
复制
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));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37187111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档