【问题标题】:Joi schema validation: Joi.object define valid keys from an arrayJoi 模式验证:Joi.object 从数组中定义有效键
【发布时间】:2016-05-12 12:37:21
【问题描述】:

我有一个这样的 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 工具实现吗?

【问题讨论】:

    标签: javascript node.js validation joi


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-05-11
      • 1970-01-01
      • 2021-04-16
      • 1970-01-01
      • 1970-01-01
      • 2017-08-20
      • 2021-02-05
      • 1970-01-01
      • 2020-01-07
      相关资源
      最近更新 更多