我需要创建动态模式来验证我在 node js
中的 api 请求查询,使用 Joi 验证器 取决于请求查询中的键。说下面提到的模式是我的有效查询。
我正在使用 hapi/joi
版本 16.1.8
组合1
{ type: 1, firstname: 'user first name', lastname: 'user last name'}
组合2
{ type: 2 , salary: 1000, pension: 200}
组合3
{ type: 3 , credit: 550, debit: 100}
如您所见,对象键因 type
的值而异。如何正确处理?
我们可以使用 Joi.alternatives 处理两种情况,例如
const schema = Joi.alternatives().conditional(Joi.object({ type: 1 }).unknown(), {
then: Joi.object({
type: Joi.string(),
firstname: Joi.string(),
lastname: Joi.string()
}),
otherwise: Joi.object({
type: Joi.number(),
salary: Joi.any(),
pension: Joi.any()
})
});
但是如何在 3 个条件下做到这一点呢?
原文由 Nitheesh 发布,翻译遵循 CC BY-SA 4.0 许可协议
我以不同的方式实现了同样的目标。在这里发布相同的内容,因为这可能对将来的某人有用。
这如预期的那样完美地工作。
当类型值为
1
firstname
只有type
lastname
当类型值为
pension
2
salary
只有type
当类型值为
3
debit
credit
type
任何其他组合都将从 joi 验证器中间件层作为错误抛出。此外,除 1、2 和 3 之外的任何其他类型值都将引发错误。