【发布时间】:2021-09-09 04:09:22
【问题描述】:
我在 JOI 模式中有一个字段,我希望它是可选的(即接受 undefined,也接受 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) }),
}),
});
在上述之前我最初没有 .when 而是容量规则是:
capacity: joi.number().optional().allow(null).integer().min(0),
但是这也不起作用,它在提交空值时不断抛出错误“必须是数字”。
【问题讨论】:
-
您是否尝试过完全删除 when ,而在原始对象中只包含
capacity: joi.integer().min(0)? -
@khenriksson 感谢您的评论。
capacity: joi.integer().min(0)不起作用,因为我相信 .integer 仅适用于 joi.number。但是容量:joi.number().integer().min(0)不是我想要的,因为它不允许空值。我已经尝试添加allow(null)规则但没有成功 - 我更新了我的问题描述以解释我事先尝试过的内容。 -
尝试在 joi.object() 之后删除 .required()
-
@Sudhir 感谢您的评论,但恐怕这并没有改变任何东西,似乎
.while仍然被忽略了。此外,删除.required不是我想要做的,因为我希望整个对象在传入请求中是强制性的。
标签: javascript node.js express validation joi