Joi 验证 - 允许字段是可选的,但提供时必须是正整数

Yob*_*Yob 5 javascript validation node.js express joi

我在 JOI 模式中有一个字段,我希望该字段是可选的(即接受未定义,也接受 null),但是如果提供了它的值,则它必须是正整数。我该如何实现这一目标?

这是我到目前为止所尝试过的,验证字段是“容量”,但它似乎不起作用,似乎“.when”语句被忽略了:

const divebarSchema = joi.object({
  divebar: joi
    .object({
      title: joi.string().required(),
      capacity: joi.optional().allow(null),
      description: joi.string().required(),
      location: joi.string().required(),
      image: joi.string().optional().allow(""),
      map: joi.string().optional().allow(""),
    })
    .required()
    .when(joi.object({ capacity: joi.exist() }), {
      then: joi.object({ capacity: joi.number().integer().min(0) }),
    }),
});
Run Code Online (Sandbox Code Playgroud)

在上面之前,我最初没有 .when ,而是容量规则是:

  capacity: joi.number().optional().allow(null).integer().min(0),
Run Code Online (Sandbox Code Playgroud)

然而,这也不起作用,它在提交空值时不断抛出错误“必须是数字”。

shy*_*yam 3

根据 Joi 文档optional不包括 null 你需要使用allow

capacity: Joi.number().optional().integer().min(0).allow(null)
Run Code Online (Sandbox Code Playgroud)