如何获得joi模式中的所有键?

时间:2019-10-07 12:32:38

标签: javascript object joi

我有一个像这样的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"
]

2 个答案:

答案 0 :(得分:1)

类似的事情可能会有所帮助。

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);

答案 1 :(得分:1)

发生意外行为的原因是由于userModel不是普通对象,而是joi对象。

一个可能的解决方案是检查userModel._ids._byKey.keys()以获得模式中所有键的Map迭代器。该解决方案的问题在于您依靠Joi框架的内部。

我可能会建议另一种方法:在单独的数据结构(数组或对象)中提取必填字段,并基于此扩展Joi模式。