#node.js #express #schema #joi
Вопрос:
Хотите создать проверку схемы Joi на основе имени параметра, чтобы выбрать соответствующую схему для проверки
Не Хапи/Дзеи
Параметры будут либо штатными, ассоциированными по контракту, стажерами, сезонными ассоциированными
Схемы прилагаются ниже
var associate = Joi.object().keys({
Job_title: Joi.string().required(),
work_information: Joi.object().keys({
Full_Name: Joi.string().required(),
Email_Address: Joi.string().required(),
phone_number: Joi.string().required(),
company_Name: Joi.string().required(),
manager_information: Joi.string().required(),
gender: Joi.string().required(),
Date_of_Birth: Joi.string().required(),
manager_information: Joi.string().required(),
})
});
var intern = Joi.object().keys({
Job_title: Joi.string().required(),
work_information: Joi.object().keys({
Full_Name: Joi.string().required(),
Email_Address: Joi.string().required(),
phone_number: Joi.string().required(),
company_Name: Joi.string().required(),
manager_information: Joi.string().required(),
gender: Joi.string().required(),
Date_of_Birth: Joi.string().required(),
manager_information: Joi.string().required(),
university_name: Joi.string().required(),
date_of_graduation: Joi.string().required(),
})
});
var contractor = Joi.object().keys({
Job_title: Joi.string().required(),
work_information: Joi.object().keys({
Full_Name: Joi.string().required(),
Email_Address: Joi.string().required(),
phone_number: Joi.string().required(),
consulting_agency: Joi.string().required(),
})
});
var seasonal = Joi.object().keys({
Job_title: Joi.string().required(),
work_information: Joi.object().keys({
Full_Name: Joi.string().required(),
Email_Address: Joi.string().required(),
phone_number: Joi.string().required(),
duration_of_employment: Joi.string().required(),
manager_information: Joi.string().required(),
})
});
Вот что у меня есть, так что
var createAssociateProfile = Joi.object({
params: Joi.object({
name: Joi.string().valid('full-time', 'contract-associate', 'intern-associate', 'seasonal-associate' ).required()
}),
body: Joi.object({
Job_title: Joi.string().required(),
work_information: Joi.object().required().when('params.name',
{ is: 'full-time', then: associate },
{ is: 'contract-associate', then: intern},
{ is: 'intern-associate', then: contractor},
{ is: 'seasonal-associate', then: seasonal},
)
})
});
Комментарии:
1. В чем заключается ваш вопрос ? Поскольку вы уже прикрепили решение, хотите ли вы более оптимизированное решение ?
2. Решение-это мой текущий прогресс, оно не работает
Ответ №1:
С помощью .when('params.name')
этого вы оцениваете одноранговый объект внутри work_information
объекта.
Чтобы ссылаться на первый params
объект, вы должны сделать:
.when('...params.name')
...
это ссылка на прародителя.
Вот более подробная информация об относительных ссылках:
https://github.com/sideway/joi/blob/master/API.md#relative-references
Комментарии:
1. Похоже, это не работает. При тестировании схемы Joi путем выбора требуемого поля схема joi не выдает ошибку
2. @Pfizer в чем ошибка?
3. при проверке схемы путем доступа к конечной точке она, по-видимому, дает нам ответ на успех, который мы ищем. Однако, если вы опустите обязательное поле в запросе, проверка JOI не вернет ошибку для отсутствующего поля. Мои мысли заключаются в том, что проверка схемы не выполняется.