如何在Joi中仅使用一项验证阵列?

时间:2020-07-21 04:05:00

标签: joi

我想将字符串数组作为Joi的参数,但是当我仅传递一项时,我会收到错误值must be an array。如果我尝试传递第二个为空的值以强制在Express中进行数组语法转换,则在严格定义可能的值集之后,我会收到must be one of...错误,因为严格不允许使用空值。

请求架构:

const requestSchema = Joi.object().keys({
  query: Joi.object().keys({
    endTime: Joi.string().required(),
    fields: Joi.array().items(
      Joi.string().valid(
        "value1",
        "value2",
        "value3"
      )
    ),
    startTime: Joi.string().required()
  })
});

1 个答案:

答案 0 :(得分:0)

此处的键是single()函数。实现这一点将允许您为数组传递单个值,而Joi会将单个值包装在数组中,以便正确验证:

const requestSchema = Joi.object().keys({
  query: Joi.object().keys({
    endTime: Joi.string().required(),
    fields: Joi.array().items(
      Joi.string().valid(
        "value1",
        "value2",
        "value3"
      )
    ).single(),
    startTime: Joi.string().required()
  })
});

这使您可以发送fields=value1,它会转换为:fields: ["value1"]