Как получить все ключи в схеме joi? - PullRequest
0 голосов
/ 07 октября 2019

У меня была такая схема 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 ]

1 голос
/ 07 октября 2019

Причиной неожиданного поведения является то, что userModel - это не обычный объект, это объект joi.

Возможным решением является проверка userModel._ids._byKey.keys(), чтобы получить итератор Map всех ключей в схеме. Проблема с этим решением заключается в том, что вы рассчитываете на внутреннюю часть фреймворка Joi.

Я мог бы предложить другой подход: извлечь необходимые поля в отдельную структуру данных - массив или объект и расширить схему Joi на основе этого.


1 голос
/ 07 октября 2019

Как-то так может помочь.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...