问题描述
我有一个可以是多种类型之一的字段。每种类型都有不同的模式。我尝试使用 Joi.alternatives
来验证请求 JSON。但是,我想从内部验证函数中解除错误。当前 alternatives
使用错误消息覆盖它。
例如,我有一个字段调用 customer
,它可以是 business
或 person
。如果客户是 person
,则只有 name
字段存在。
{
"customer": {
"name": "John Doe"
},...
}
另一方面,如果客户是 business
,则 name
和 businessCode
字段都存在。
{
"customer": {
"name": "My Company","businessCode": 1820
},...
}
我做如下验证:
Joi.alternatives()
.match("one")
.try(
Joi.object<Person>({
name: Joi.string().required()
}).unkNown(false).required(),Joi.object<Business>({
name: Joi.string().required(),businessCode: Joi.number().integer().positive().required()
}).unkNown(false).required()
)
我使用 match('one')
指定应该匹配 business
或 person
,但不能同时匹配。当我传递一个像 businessCode
这样的无效 {"businessCode": -999}
时,Joi 抛出
"customer" 不匹配任何允许的类型
这不如提供诸如“业务代码为负,不允许作为业务”之类的消息有用。我们知道这是一项业务,因为一个人没有任何业务代码。如何从内部验证中解除错误?我想到的另一种选择是进行两次验证,在我们验证字段存在后验证字段,但我不确定如何在 Joi 中执行此操作。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)