gpt4 book ai didi

javascript - Joi 中的 array.items() 内的 object.pattern() 无法正常工作

转载 作者:行者123 更新时间:2023-12-02 22:31:46 25 4
gpt4 key购买 nike

我正在尝试验证嵌套对象,其键应与外部对象匹配,另一个键的值为数组,使用 Joi
我尝试使用 object.patternarray.length其演示于 How to validate nested object whose keys should match with outer objects another key whose value is array using 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] ] } }

如何在没有硬编码 key 的情况下进行此验证?

最佳答案

Joi.ref('details', {adjust: (value) => Object.keys(value).length}) ,

问题 - 这里 valuedetails这是一个数组。所以Object.keys(<details-array>).length不会按预期工作

解决方案 - map value数组 Object.keys().length并使用下面给出的最大值

<小时/>

Joi.object().pattern(Joi.in('keys'), Joi.string()) ,

问题 - keysdetails 的 sibling

解决方案 - 添加/作为对象根的前缀

<小时/>
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));
}
})
)
});

<强> stackblitz

引用

https://github.com/hapijs/joi/blob/master/API.md#Relative-references

关于javascript - Joi 中的 array.items() 内的 object.pattern() 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58876986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com