簡體   English   中英

如何獲取 joi 模式中的所有鍵?

[英]How to get all the keys in a joi schema?

我有一個這樣的 joi 模式

const userModel = Joi.object({
  id: Joi.string().min(3).max(50),
  username: Joi.string().min(10).max(100)
  ... other 10 properties
})

問題是我想獲取所有鍵的值,例如

["id","username",...]

我嘗試使用 Object.keys(userModel),但這會返回一個意外的值,例如

[
  "isJoi",
  "_currentJoi",
  "_type",
  "_settings",
  "_baseType",
  "_valids",
  "_invalids",
  "_tests",
  "_refs",
  "_flags",
  "_description",
  "_unit",
  "_notes",
  "_tags",
  "_examples",
  "_meta",
  "_inner"
]

這樣的事情可能會有所幫助。

const userModel = Joi.object({
  id: Joi.string().min(3).max(50),
  username: Joi.string().min(10).max(100)
})


const keys = [];
for (var i of userModel._ids._byKey.entries()){
  keys.push(i[0])
}

console.log(keys);

出現意外行為的原因是因為 userModel 不是普通的 object,而是 joi object。

一種可能的解決方案是檢查userModel._ids._byKey.keys()以獲取架構中所有鍵的 Map 迭代器。 此解決方案的問題在於您依賴 Joi 框架的內部結構。

我可能會建議另一種方法:在單獨的數據結構中提取所需的字段 - 數組或 object 並在此基礎上擴展 Joi 模式。


我自己一直在為此苦苦掙扎。 在對 api 進行了一些挖掘之后,我發現了這個

對於 Joi.object 這將返回一個簡單的 object 具有稱為鍵的屬性

{
  type: 'object',
  keys: {
    nestedItem1: { type: 'any', rules: [Array], allow: [Array] },
    nestedItem2: { type: 'string', flags: [Object], rules: [Array] },
  }
}

從那里開始很簡單。

const userModel = Joi.object({
    id: Joi.string().min(3).max(50),
    username: Joi.string().min(10).max(100)
});

const keys = Object.keys(userModel.describe().keys);

console.log(keys)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM