我想将字符串数组作为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()
})
});
答案 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"]
。