亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

九州編程 2022-01-01 20:44:38
我正在嘗試使用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


查看完整回答
反對 回復 2022-01-01
  • 1 回答
  • 0 關注
  • 175 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號