[英]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.