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

Posted

技术标签:

【中文标题】在 joi 和 express-validation 中允许字符串为空或空【英文标题】:Allow string to be null or empty in joi and express-validation 【发布时间】:2017-07-11 06:51:41 【问题描述】:

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

我已经尝试过这些案例:

dataId: Joi.string().allow(null).allow('').optional()

dataId: Joi.alternatives().try(Joi.string(), Joi.allow(null))

但它们都不起作用。

【问题讨论】:

【参考方案1】:

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

dataId: Joi.string().allow(null, '')

见Joi documentation on allow(value)

【讨论】:

我尝试使用 Express-validator/validator.js 做同样的事情,知道如何检查 null 并正确验证吗? github.com/chriso/validator.jsgithub.com/express-validator/express-validator 我以前没有使用过那个库,但看起来你可以使用自定义验证器来使用。 github.com/express-validator/express-validator#customvalidator 是的,我虽然一样,但是文档说:“返回:当前验证链实例”。但我不能返回 'null',因为 Express 验证器说它不能返回 null :S。【参考方案2】:

很简单,假设字段是数据,那么你可以将验证强加为

data: Joi.string().allow('')

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

data: Joi.string().allow('', null)

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

data: Joi.string().empty('')

【讨论】:

【参考方案5】:

如果你只是指定它为

dataId: Joi.string()

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

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

dataId: Joi.string().min(0).allow('').allow(null)

【讨论】:

【参考方案6】:

如果您只需要 null 或空字符串,请使用:

 dataId: Joi.string().valid(null, '')

【讨论】:

以上是关于在 joi 和 express-validation 中允许字符串为空或空的主要内容,如果未能解决你的问题,请参考以下文章

年轮蛋糕JOI2014Final

Joi 嵌套模式

koa中使用joi进行参数校验

如何允许Joi中的任何其他键[重复]

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

JOI2017FinalC JOIOI 王国