如何正确解除 Joi.alternatives 中的错误?

问题描述

我有一个可以是多种类型之一的字段。每种类型都有不同的模式。我尝试使用 Joi.alternatives 来验证请求 JSON。但是,我想从内部验证函数中解除错误。当前 alternatives 使用错误消息覆盖它。

例如,我有一个字段调用 customer,它可以是 businessperson。如果客户是 person,则只有 name 字段存在。

{
  "customer": {
    "name": "John Doe"
  },...
}

另一方面,如果客户是 business,则 namebusinessCode 字段都存在。

{
  "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') 指定应该匹配 businessperson,但不能同时匹配。当我传递一个businessCode 这样的无效 {"businessCode": -999} 时,Joi 抛出

"customer" 不匹配任何允许的类型

这不如提供诸如“业务代码为负,不允许作为业务”之类的消息有用。我们知道这是一项业务,因为一个人没有任何业务代码。如何从内部验证中解除错误?我想到的另一种选择是进行两次验证,在我们验证字段存在后验证字段,但我不确定如何在 Joi 中执行此操作。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)