在 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 中允许字符串为空或空的主要内容,如果未能解决你的问题,请参考以下文章