当前位置 : 主页 > 网页制作 > Nodejs >

Node.js / Hapijs – 在没有命名键的情况下验证JSON对象有效负载中的所有键和值

来源:互联网 收集:自由互联 发布时间:2021-06-16
我的API中的一些功能涉及获取POST发送的有效负载输入并将其交给另一个应用程序进行处理.有效负载输入始终作为 JSON对象发送,值必须始终为数字.但是,因为JSON对象有数百种不同的变体
我的API中的一些功能涉及获取POST发送的有效负载输入并将其交给另一个应用程序进行处理.有效负载输入始终作为 JSON对象发送,值必须始终为数字.但是,因为JSON对象有数百种不同的变体(因为它们在其他应用程序中匹配的模型越来越多),所以我不可能为验证配置命名每个键和值我在Hapijs中定义的POST路由中的选项.

我希望我可以做这样的事情,但想象一下,必须有更多的黑客攻击:

config: {
    validate: {
        payload: Joi.object().keys(Joi.number())    
    }
}

也许有一些方法可以遍历对象并确保值都是数字 – 在validate选项中 – 但感觉它可能效率很低.

您可以使用 Joi.object().pattern(regex, schema);来验证未知密钥.

如果您只是想检查属性是否只是您可以做的所有数字:

config: {
    payload: { 
        output: data 
    },
    validate: {
        payload: Joi.object().pattern(/.*/, Joi.number()) // Any key   
    }
}

如果您还想验证密钥,可以添加更具体的正则表达式.

Joi示例只允许名为a-z的键:

var Joi = require('joi');

var object = {
    a: 1,
    b: 2,
    c1: 3  // <--- Bad key
};

var schema = Joi.object().pattern(/^[a-z]$/, Joi.number());

Joi.assert(object, schema);

输出:

Error: {
  "a": 1,
  "b": 2,
  "c1" [1]: 3
}

[1] "c1" is not allowed
网友评论