javascript - 如何获取 joi 模式中的所有键?

标签 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","用户名",...]

我尝试使用 Object.keys(userModel),但这返回了一个意外的值,例如

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

最佳答案

出现意外行为的原因是 userModel 不是普通对象,而是 joi 对象。

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

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

<小时/>

关于javascript - 如何获取 joi 模式中的所有键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58269607/

相关文章:

javascript - 如何让Jquery事件只执行最近触发​​的事件

c++ - 在 C++ 的继承上下文中按值传递对象

javascript - 使用 Joi 和 nodeJS 验证嵌套对象中的唯一键对

javascript - 使用 Joi,如何将 .or 用于递归对象

javascript - 有没有像 Joi 这样的 JS 智能 json 模式验证器,但是有动态自定义错误?

javascript - 仅当数组中尚不存在该对象时才将其添加到数组中

javascript - react JS : Uncaught Error: parse Error: Unexpected token

javascript - 如何使 for 循环迭代从数据库结果添加到数组的附加元素?

javascript - JS 如何在 forEach 循环中从数组中删除一个对象?

entity-framework - 带有列表的 Entity Framework 复杂对象