2017-01-19 7 views
7

У меня есть объект с именами клавиш, которые я не могу знать - они созданы пользователем. Однако я знаю, какие значения они (ключи) собираются хранить, и они (значения) будут представлять собой строки ISO. Как проверить эти значения? И, необязательно, как я проверить ключи Неизвестного объекта, то есть:Проверка объекта Joi: как проверить значения с неизвестными именами ключей?

key: Joi.string().min(2).max(25) 

То, что я уже пробовал был основан на дом API Docs:

Another benefits of using Joi.object([schema]) instead of a plain JS object is >that you can set any options on the object like allowing unknown keys, e.g:

const schema = Joi.object({ arg: Joi.string().valid('firstname', 'lastname', 'title', 'company', 'jobtitle'), value: Joi.string(), }).pattern(/firstname|lastname/, Joi.string().min(2));

То, что я понял из примера является то, что arg ключ представляет Joi.object()key и value представляет собой value.

Мой пример:

campaign: Joi.object({ 
    arg: Joi.string().valid('unknown'), 
    value: Joi.date().iso(), 
}).pattern(/unknown/, Joi.string().min(2).max(25)) 

Мой вход;

campaign: { g_ad_adwords: "2017-01-19T11:33:26.205Z" } 

Моя ошибка:

"campaign" fails because ["g_ad_adwords" is not allowed]

ответ

8

Попробуйте это. Это будет в основном принимать любую клавишу в пределах объекта campaign и значение должны подтвердить против Joi.date().iso()

campaign: Joi.object().pattern(/^/, Joi.date().iso()) 

Это, однако, будет соответствовать любой ключ. Вы можете ограничить это, немного отменив регулярное выражение. например только буквы от 2 до 25 символов

campaign: Joi.object().pattern(/\w{2,25}/, Joi.date().iso()) 

UPDATE

Что касается the example в документации дзёи, я не проверял, но вот моя интерпретация. Я понимаю, что это не самый простой пример, они могли бы дать ...

const schema = Joi.object({ 
    arg: Joi.string().valid('firstname', 'lastname', 'title', 'company', 'jobtitle'), 
    value: Joi.string(), 
}).pattern(/firstname|lastname/, Joi.string().min(2)); 

Объекты для проверки необходимо содержать два атрибута arg и value где значение arg «s может быть один из 'firstname', 'lastname', 'title', 'company', 'jobtitle' и value это просто строка.

{ 
    arg: 'firstname', 
    value: 'john' 
} 

{ 
    arg: 'lastname', 
    value: 'smith' 
} 

{ 
    arg: 'jobtitle', 
    value: 'brewer' 
} 

Однако это также позволит объекту иметь атрибуты firstname и lastname, где и их значений является строкой с более чем из двух символов. Таким образом, приведенные выше примеры можно свести к одному действительному объекту.

{ 
    firstname: 'john', 
    lastname: 'smith', 
    arg: 'jobtitle', 
    value: 'brewer' 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^