如何检查Joi中的有效对象
How to check for a valid object in Joi
我有一个对象数组,表示端点输入的有效组合:
const portfolios = [
{ "name": "portfolioA", "product": "productA" },
{ "name": "portfolioB", "product": "productB" },
{ "name": "portfolioB", "product": "productC" },
{ "name": "portfolioC", "product": "productD" },
...
]
例如,用户可以用'productA'请求'portfolioA',但不能用'productB',或者他们可以用'productB'或'productC'请求'portfolioB'。
我将得到这样的输入:
portfolio: {
name: "portfolioA",
product: "productA"
}
我希望能够以编程方式检查此对象与"投资组合"中的有效对象。我认为这可以使用Joi.object().valid(portfolios)
完成,但验证失败。
我可以使用when()使用下面的模式手动检查每一个,但是投资组合数组可以更改,并且我不希望每次都更改验证代码。我更愿意给它一个有效对象数组
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对象的数组?
我知道该怎么做了。Joi 9.0.0-0包含一个名为extends
的新方法,它为我解决了这个问题。
const portfolios = { ... }
const customJoi = Joi.extend({
base: Joi.object(),
name: 'portfolio',
language: {
isValid: `portfolio must be one of ${JSON.stringify(portfolios)}`
},
rules: [
{
name: 'isValid',
validate(params, value, state, options) {
const found = results.find(e => e.name === value.name && e.product === value.product);
if (!found) {
return this.createError('portfolio.isValid', { v: value, q: params.q }, state, options);
}
return found;
}
}
]
});
然后在我的验证声明中我可以使用
portfolio: customJoi.portfolio().isValid().required(),
相关文章:
- Rails将JavaScript对象存储到Model的有效方式
- 将JS对象数组转换为嵌套形式的最有效方法
- I'我在页面加载时将整个$_SESSION变量放入一个json对象中.虽然这对我有效,但这是一个好的做法吗
- 如何有效地匹配两个不同 JavaScript 对象上的 id,并将它们合并在一起
- 以有效的方式搜索对象列表 mongo
- Date对象在Chrome中有效,但在Safari、Firefox或IE中无效
- 正在将字符串转换为有效的JSON对象
- 使用一堆 setTimeouts 还是一个 setInterval 来刷新一堆对象更有效
- JSON tv4 对象在 true 且存在其他对象时有效
- JavaScript 中更有效的选项对象
- 为什么这种用于计算数组重复并将其存储到对象中的方法有效
- tizen.filesystem.resolve() error - 对象的内容不包含有效值
- 函数是否是 JavaScript 对象属性的有效键
- JS:为什么这个对象属性不起作用,只有当我把它作为变量放在其中一个方法中时,它才有效
- 使用具有有效 JavaScript 格式的 Json.NET 序列化对象
- 在 JavaScript 中合并多个排序对象数组的最有效方法是什么?
- 有效记忆对象参数
- Javascript:可以访问对象并显示它,但不是该对象的有效属性
- 有没有一种有效的方法来执行不区分大小写的 JavaScript 对象属性名称查找
- 如何检查Joi中的有效对象