Joi - 如何检查其他键的值为 null/空

Jua*_*uez 7 javascript validation schema node.js joi

我在尝试验证 JSON 文件时遇到问题,更具体地说,我在when条件方面遇到问题。

我有一把钥匙,它必须是过去的日期,但不是必需的。然后我有一个b键,它应该是一个 url,如果 a 为 null/空, 则 b 可以为空,否则必须是 required

我将在下面留下我的代码以使其清楚,但现在如果b为空但a不为空,我不会收到任何错误。

a: Joi.date().less("now").raw().optional().allow(null, ""),
b: Joi.string()
  .uri({ scheme: [/https?/] })
  .when("a", {
    is: Joi.any().empty(),
    then: Joi.optional().allow(null, ""),
    otherwise: Joi.required(),
  }),
Run Code Online (Sandbox Code Playgroud)

Jua*_*uez 7

找到解决方案了,我的条件是错误的。

我使用的是:Joi.any().empty(),而不是:Joi.any().valid(null, "")并且它有效。

所以解决方案是这样的:

a: Joi.date().less("now").raw().optional().allow(null, ""),
b: Joi.string()
  .uri({ scheme: [/https?/] })
  .when("a", {
    is: Joi.any().valid(null, ""),
    then: Joi.optional().allow(null, ""),
    otherwise: Joi.required(),
  }),
Run Code Online (Sandbox Code Playgroud)