在joi和express-validation中允许字符串为null或为空

dve*_*ti3 3 validation node.js joi

我在项目中使用“ joi”:“ 10.0.6”和“ express-validation”:“ 1.0.1”来验证将保存在数据库中的JSON对象。字段之一是字符串,但可以为null或为空。在字符串为空或为null的情况下,如何允许其通过验证?

我已经尝试过以下情况:

dataId: Joi.string().allow(null).allow('').optional()
Run Code Online (Sandbox Code Playgroud)

dataId: Joi.alternatives().try(Joi.string(), Joi.allow(null))
Run Code Online (Sandbox Code Playgroud)

但它们都不起作用。

Nav*_*mad 12

这很简单,假设该字段是数据,那么您可以将验证作为

data: Joi.string().allow('')
Run Code Online (Sandbox Code Playgroud)

允许空字符串通过,对于多个字符串验证,也可以这样做

data: Joi.string().allow('', null)
Run Code Online (Sandbox Code Playgroud)

允许传递数据字段的空值和空值。


Jos*_*ley 10

如果你想允许空字符串并将其视为未定义(即将其转换为未定义),则使用 Joi 的empty方法

data: Joi.string().empty('')
Run Code Online (Sandbox Code Playgroud)


Mar*_*arc 6

如果您只是将其指定为

dataId: Joi.string()
Run Code Online (Sandbox Code Playgroud)

默认情况下它应该是可选的。

编辑:目前无法自己尝试。如果上面不起作用,这里有一个替代方案:

dataId: Joi.string().min(0).allow('').allow(null)
Run Code Online (Sandbox Code Playgroud)


Dao*_*Lam 5

Joi.string().allow('').allow(null)应该有效。我在本地测试过,效果很好。

显示您的测试用例和错误?


Wha*_*ool 5

您也可以使用逗号分隔列表来指定它。

dataId: Joi.string().allow(null, '')
Run Code Online (Sandbox Code Playgroud)

请参阅Joi文档上的allow(value)