我的API中的一些功能涉及获取POST发送的有效负载输入并将其交给另一个应用程序进行处理.有效负载输入始终作为 JSON对象发送,值必须始终为数字.但是,因为JSON对象有数百种不同的变体
我希望我可以做这样的事情,但想象一下,必须有更多的黑客攻击:
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