Проверка подпунктов, зависящих от родительских параметров, с помощью Joi и Hapi
Как я могу реализовать проверку для чего-то вроде следующей логики для параметров запроса:
if (type is 'image') {
subtype is Joi.string().valid('png', 'jpg')
else if (type is 'publication') {
subtype is Joi.string().valid('newspaper', 'book')
чтобы получить либо
server/?type=image&subtype=png
или же
server/?type=publication&subtype=book
но не оба image
а также publication
в то же время?
Обновление: я попробовал следующий код, но не повезло
type: Joi
.string()
.valid('image', 'publication', 'dataset')
.optional(),
subtype: Joi
.when('type',
{
is: 'image',
then: Joi
.string()
.valid('png', 'jpg')
.optional()
},
{
is: 'publication',
then: Joi
.string()
.valid('newspaper', 'book')
.optional()
}
)
.optional()
.description('subtype based on the file_type')
1 ответ
Решение
Вы близки с использованием .when()
, Вместо того, чтобы пытаться поместить все перестановки в один .when()
вызов, вы можете связать их вместе, как функция происходит от общего any
состав. К сожалению, документация не делает это особенно ясно.
{
type: Joi.string()
.valid('image', 'publication', 'dataset')
.optional(),
subtype: Joi.string()
.optional()
.when('type', {is: 'image', then: Joi.valid('png', 'jpg')})
.when('type', {is: 'publication', then: Joi.valid('newspaper', 'book')})
.description('subtype based on the file_type')
}