Joi 不起作用的条件验证

Conditional Validation with Joi not working

提问人:Jay Shukla 提问时间:10/13/2023 更新时间:10/26/2023 访问量:27

问:

我想在我的 json 架构中有条件地为不同的国家/地区定义一些属性。以下是我正在尝试的,但不知何故它不起作用。

Joi.object({
  country: Joi.string().required(),
  productValue: Joi.when(".country", {
    is: "VN",
    then: Joi.number().required(),
    otherwise: Joi.string()
  }),
  pickUpDetails: Joi.object().keys({
    ward: Joi.when(Joi.ref('country'), {
      is: "VN",
      then: Joi.string().required(),
      otherwise: Joi.string()
    })
  }),
})

我正在针对上述架构进行验证的示例 JSON 如下:

{
    "country": "ID",
    "productValue": "",
    "pickUpDetails": {
        "ward": ""
    }
}

根据我的理解和期望,上述JSON应该是有效的,因为我传递的国家/地区值是ID而不是VN。谁能帮忙?

Playground 在这里测试它

节点.js joi 快乐

评论

1赞 Chiến Lê 10/13/2023
你应该为病房和产品价值添加allow("")

答:

0赞 Joshua Burbidge 10/26/2023 #1

空字符串未通过 的验证。你可以使用 ,或者如果你想要求它,并且总是 当 .""Joi.string()Joi.string().allow("")Joi.valid("")wardproductValue""country != "VN"