Thi*_*ddi 4 javascript validation node.js node-modules joi
我正在使用节点模块 Joi 进行一些验证,但在使用 .or() 方法时遇到了问题。
在他们的文档中,他们将用途指定为:
var schema = Joi.object().keys({
a: Joi.any(),
b: Joi.any()
}).or('a', 'b');
Run Code Online (Sandbox Code Playgroud)
但是我正在尝试验证一个对象,并且我想使用 .or() 来检查嵌套在不同属性下的属性,明白了吗?就像是:
var schema = Joi.object().keys({
body:{
device:{
smthelse: Joi.any(),
ua: Joi.string()
}
},
headers:{
'user-agent': Joi.string()
}).or('body.device.ua', 'headers.user-agent');
Run Code Online (Sandbox Code Playgroud)
但我似乎无法让它发挥作用。有谁知道我是否遗漏了什么?对于嵌套对象,用户 .or() 是这样吗?
谢谢!
感谢 Bulkan 的回答,但这实际上不起作用。我在 hapijs github 的问题部分发布了同样的问题并得到了解决方案,这是它(由 DavidTPate 发布):
你这样做的方式对我来说似乎不可能,因为它看起来不像顶层的 object.or() 支持引用嵌套项目。你可以用替代品来做到这一点。
你应该能够做到
var bodySchema = Joi.object().keys({
body: Joi.object().keys({
device: Joi.object().keys({
ua: Joi.string().required()
}).required();
}).required();
}).required();
var headerSchema = Joi.object().keys({
headers: Joi.object().keys({
'user-agent': Joi.string().required()
}).required()
}).required();
var schema = Joi.alternatives().try(bodySchema, headerSchema);
Run Code Online (Sandbox Code Playgroud)
这是更多信息的链接:https : //github.com/hapijs/joi/issues/643
| 归档时间: |
|
| 查看次数: |
5191 次 |
| 最近记录: |