猿问

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

我正在尝试使用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] ] } }

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


九州编程
浏览 156回答 1
1回答

扬帆大鱼

Joi.ref('details', {adjust: (value) => Object.keys(value).length}),问题- 这里value指的details是数组。所以Object.keys(<details-array>).length不会按预期工作解决方案-使用下面给出的最大值映射value数组Object.keys().lengthJoi.object().pattern(Joi.in('keys'), Joi.string()),问题-keys指的是兄弟姐妹details解决方案- 添加/作为对象根的前缀var schema = Joi.object({&nbsp; details: Joi.array().items(Joi.object().pattern(Joi.in('/keys'), Joi.string())),&nbsp; keys: Joi.array().length(&nbsp; &nbsp; Joi.ref('details', {&nbsp; &nbsp; &nbsp; adjust: value => {&nbsp; &nbsp; &nbsp; &nbsp; return Math.max(...value.map(o => Object.keys(o).length));&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; })&nbsp; )});闪电战参考https://github.com/hapijs/joi/blob/master/API.md#Relative-references
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答