У меня есть массив объектов, которые представляют допустимые комбинации входных данных для моей конечной точки:Как проверить наличие действительного объекта в Joi
const portfolios = [
{ "name": "portfolioA", "product": "productA" },
{ "name": "portfolioB", "product": "productB" },
{ "name": "portfolioB", "product": "productC" },
{ "name": "portfolioC", "product": "productD" },
...
]
Например, пользователь может запросить «portfolioA» с «productA», но а не «productB», или они могут запросить «портфолиоB» с «productB» или «productC».
вход я получу будет выглядеть следующим образом:
portfolio: {
name: "portfolioA",
product: "productA"
}
Я хотел бы быть в состоянии проверить этот объект против действительных объектов в портфелях 'программно. Я думал, что это можно сделать, используя Joi.object().valid(portfolios)
, но проверка не удалась.
Я могу использовать if() для проверки каждого из них вручную, используя схему ниже, однако массив портфелей может меняться, и я бы не стал менять код проверки каждый раз. Я бы предпочел просто дать ему массив действительных объектов.
portfolio: {
name: Joi.string().required(),
product: Joi.string().required()
.when('name', { is: Joi.string().valid('portfolioA'), then: Joi.string().valid('productA') })
.when('name', { is: Joi.string().valid('portfolioB'), then: Joi.string().valid(['productB', 'productC']) })
}
В качестве побочного примечания, когда проверка не выполняется, я вижу это вместо строкового представления.
\"portfolio\" must be one of [[object Object], [object Object], [object Object], [object Object], [object Object]
Есть ли способ проверить объекты против массива объектов с помощью Joi?
Спасибо. Я тоже искал это. –
Это очень помогает – herve