很难理解 .has 对 joi 中的数组的作用
Difficult to understand what exactly .has does with array in joi
我正在尝试学习 JOI 来验证模式,我遇到了以下内容
const schema = Joi.array().items(
Joi.object({
a: Joi.string(),
b: Joi.number()
})
).has(Joi.object({ a: Joi.string().valid('a'), b: Joi.number() }))
我按照以下方式验证了该方案let c = arr2.validate([{ a:'a', b:'b'}])
我在验证时得到的响应是
{
value: [ { a: 'a', b: 'b' } ],
error: [Error [ValidationError]: "[0].b" must be a number] {
_original: [ [Object] ],
details: [ [Object] ]
}
}
然后我尝试使用如下模式进行上述验证
const arr2 = Joi.array().items(
Joi.object({
a: Joi.string(),
b: Joi.number()
})
)
即使现在我也收到了以下验证响应
{
value: [ { a: 'a', b: 'b' } ],
error: [Error [ValidationError]: "[0].b" must be a number] {
_original: [ [Object] ],
details: [ [Object] ]
}
}
我只是对 .has 在第一个模式中的用途感到困惑,因为我可以直接获得有效值,如下所示
const arr2 = Joi.array().items(
Joi.object({
a: Joi.string().valid('a'),
b: Joi.number()
})
)
那么在第一个模式中服务的确切目的是什么
如 .has()
文档中所述:
Verifies that a schema validates at least one of the values in the array
示例模式...
const schema = Joi.array().items(
Joi.object({
a: Joi.string(),
b: Joi.number()
})
).has(Joi.object({ a: Joi.string().valid('a'), b: Joi.number() }))
...需要数组项中的至少一项通过验证{ a: Joi.string().valid('a'), b: Joi.number() }
例如
{ "a": "a", "b": 12345 }
另一方面,您的架构...
const arr2 = Joi.array().items(
Joi.object({
a: Joi.string().valid('a'),
b: Joi.number()
})
)
...将仅接受通过验证的项目{ a: Joi.string().valid('a'), b: Joi.number() }
。
第一个模式仍会接受类似...
[
{
"a": "foo",
"b": 12
},
{
"a": "a",
"b": 99
},
{
"a": "bar",
"b": 6
}
]
...你的不会,因为并非所有 a
键都具有值 'a'
。
我正在尝试学习 JOI 来验证模式,我遇到了以下内容
const schema = Joi.array().items(
Joi.object({
a: Joi.string(),
b: Joi.number()
})
).has(Joi.object({ a: Joi.string().valid('a'), b: Joi.number() }))
我按照以下方式验证了该方案let c = arr2.validate([{ a:'a', b:'b'}])
我在验证时得到的响应是
{
value: [ { a: 'a', b: 'b' } ],
error: [Error [ValidationError]: "[0].b" must be a number] {
_original: [ [Object] ],
details: [ [Object] ]
}
}
然后我尝试使用如下模式进行上述验证
const arr2 = Joi.array().items(
Joi.object({
a: Joi.string(),
b: Joi.number()
})
)
即使现在我也收到了以下验证响应
{
value: [ { a: 'a', b: 'b' } ],
error: [Error [ValidationError]: "[0].b" must be a number] {
_original: [ [Object] ],
details: [ [Object] ]
}
}
我只是对 .has 在第一个模式中的用途感到困惑,因为我可以直接获得有效值,如下所示
const arr2 = Joi.array().items(
Joi.object({
a: Joi.string().valid('a'),
b: Joi.number()
})
)
那么在第一个模式中服务的确切目的是什么
如 .has()
文档中所述:
Verifies that a schema validates at least one of the values in the array
示例模式...
const schema = Joi.array().items(
Joi.object({
a: Joi.string(),
b: Joi.number()
})
).has(Joi.object({ a: Joi.string().valid('a'), b: Joi.number() }))
...需要数组项中的至少一项通过验证{ a: Joi.string().valid('a'), b: Joi.number() }
例如
{ "a": "a", "b": 12345 }
另一方面,您的架构...
const arr2 = Joi.array().items(
Joi.object({
a: Joi.string().valid('a'),
b: Joi.number()
})
)
...将仅接受通过验证的项目{ a: Joi.string().valid('a'), b: Joi.number() }
。
第一个模式仍会接受类似...
[
{
"a": "foo",
"b": 12
},
{
"a": "a",
"b": 99
},
{
"a": "bar",
"b": 6
}
]
...你的不会,因为并非所有 a
键都具有值 'a'
。