【发布时间】:2021-06-26 07:12:53
【问题描述】:
我想让 Joi 拒绝像 " " 或 " " 这样的字符串,我该如何实现呢?
【问题讨论】:
标签: node.js express validation joi
我想让 Joi 拒绝像 " " 或 " " 这样的字符串,我该如何实现呢?
【问题讨论】:
标签: node.js express validation joi
使用trim 和min:
const schema = Joi
.string()
.trim()
.min(1)
.required();
测试:
console.log(schema.validate(' ')); // "value" is not allowed to be empty
console.log(schema.validate('')); // "value" is not allowed to be empty
console.log(schema.validate(' foo')); // value: 'foo'
console.log(schema.validate('foo ')); // value: 'foo'
【讨论】:
有一个验证 csv 文件的案例(通过 Papa Parse),并且要求 Joi 详细地失败 trim() 验证。 trim() 的正常行为是修复空白,这是明智的。
我们希望通过trim() 验证错误,而不是自动修复。
const schema1 = Joi.object({ username: Joi.string().trim() })
const hasValidationError1 = schema1.validate({ username: ' aslezak ' })
// hasValidationError1 { value: { username: 'aslezak' } }
const schema2 = Joi.object({ username: Joi.string().trim() })
const hasValidationError2 = schema2.validate(
{ username: ' aslezak ' },
{ abortEarly: false, convert: false, label: ['path', 'key', true] }
)
// hasValidationError2 = {
// value: { username: ' aslezak ' },
// error: { ValidationError: [ `"username" must not have leading or trailing whitespace.` ] },
// }
在 joi.dev 文档中引用 validate() 方法有助于确定配置选项。
【讨论】:
如果你想防止空字符串
Joi.string().required().min(1)
【讨论】: