我正在尝试使用Joi验证其键应与外部对象匹配的另一个键,其值为数组的嵌套对象我尝试使用object.pattern和array.length,这在如何验证其键应与另一个外部对象匹配的嵌套对象中进行了演示使用 Joi 其值为数组的键?但这不适用于 array.items()var object = { details:[{ key1: 'someValue', key2: 'someValue', key3: 'someValue' },{ key1: 'someValue', key2: 'someValue', key3: 'someValue' }], keys: ['key1', 'key2', 'key3']}var schema = Joi.object({ keys: Joi.array().length(Joi.ref('details', {adjust: (value) => Object.keys(value).length})), details: Joi.array().items(Joi.object().pattern(Joi.in('keys'), Joi.string()))})console.log(schema.validate(object)) // this should not give error but I am getting error我收到错误{ value: { details: [ [Object], [Object] ], keys: [ 'key1', 'key2', 'key3' ] }, error: { ValidationError: "details[0].key1" is not allowed _original: { details: [Array], keys: [Array] }, details: [ [Object] ] } }如何在没有硬编码密钥的情况下进行此验证?
1 回答
扬帆大鱼
TA贡献1799条经验 获得超9个赞
Joi.ref('details', {adjust: (value) => Object.keys(value).length}),
问题- 这里value指的details是数组。所以Object.keys(<details-array>).length不会按预期工作
解决方案-使用下面给出的最大值映射value数组Object.keys().length
Joi.object().pattern(Joi.in('keys'), Joi.string()),
问题-keys指的是兄弟姐妹details
解决方案- 添加/作为对象根的前缀
var schema = Joi.object({
details: Joi.array().items(Joi.object().pattern(Joi.in('/keys'), Joi.string())),
keys: Joi.array().length(
Joi.ref('details', {
adjust: value => {
return Math.max(...value.map(o => Object.keys(o).length));
}
})
)
});
闪电战
参考
https://github.com/hapijs/joi/blob/master/API.md#Relative-references
添加回答
举报
0/150
提交
取消