Node.js/Hapijs - 验证 JSON 对象负载中的所有键和值而不命名键
Node.js/Hapijs - Validate all keys and values in JSON object payload without naming keys
我的 API 中的某些功能涉及获取 POST 发送的有效负载输入并将其交给另一个应用程序进行处理。有效负载输入始终作为 JSON 对象发送,并且值必须始终为数字。但是,由于 JSON 对象有数百种不同的变体(因为它们在其他应用程序中匹配的模型越来越多),我无法为每个键和值命名对于我在 Hapijs 中定义的 POST 路由中的验证配置选项。
我希望我能做这样的事情,但想象一下必须有更多 hack-ish 解决方法:
config: {
validate: {
payload: Joi.object().keys(Joi.number())
}
}
也许有一些方法可以遍历对象并确保值都是数字——在验证选项中——但感觉它可能效率很低。
您可以使用 Joi.object().pattern(regex, schema);
来验证未知密钥。
如果您只想检查属性是否全是数字,您可以简单地执行以下操作:
config: {
payload: {
output: data
},
validate: {
payload: Joi.object().pattern(/.*/, Joi.number()) // Any key
}
}
如果您还想验证密钥,可以添加更具体的正则表达式。
仅允许名为 a-z 的键的 Joi 示例:
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
我的 API 中的某些功能涉及获取 POST 发送的有效负载输入并将其交给另一个应用程序进行处理。有效负载输入始终作为 JSON 对象发送,并且值必须始终为数字。但是,由于 JSON 对象有数百种不同的变体(因为它们在其他应用程序中匹配的模型越来越多),我无法为每个键和值命名对于我在 Hapijs 中定义的 POST 路由中的验证配置选项。
我希望我能做这样的事情,但想象一下必须有更多 hack-ish 解决方法:
config: {
validate: {
payload: Joi.object().keys(Joi.number())
}
}
也许有一些方法可以遍历对象并确保值都是数字——在验证选项中——但感觉它可能效率很低。
您可以使用 Joi.object().pattern(regex, schema);
来验证未知密钥。
如果您只想检查属性是否全是数字,您可以简单地执行以下操作:
config: {
payload: {
output: data
},
validate: {
payload: Joi.object().pattern(/.*/, Joi.number()) // Any key
}
}
如果您还想验证密钥,可以添加更具体的正则表达式。
仅允许名为 a-z 的键的 Joi 示例:
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