请教:express-validator中notEmpty与exists的区别是什么?
express-validator中
exists()和notEmpty()的区别 两者核心差异在于验证的目标完全不同:
1. exists():只检查字段是否存在
它的作用仅仅是确认请求中包含指定的字段,完全不关心字段的值是什么——哪怕值是空字符串、null、undefined,只要这个字段在请求体/查询参数等位置存在,验证就会通过。
示例:
// 当请求体是 { "username": "" } 时,验证通过 check('username').exists()
如果请求体里根本没有username这个字段,exists()会直接验证失败。
2. notEmpty():检查字段的值不为“空”
它验证的是字段的实际内容不能是“空值”,这里的空值包括:null、undefined、空字符串""、空数组[]、空对象{}。
注意:如果请求中根本不存在该字段,字段值会被视为undefined,此时notEmpty()也会验证失败。
示例:
// 当请求体是 { "username": "" } 时,验证失败 check('username').notEmpty() // 当请求体是 { "username": "alice" } 时,验证通过 check('username').notEmpty()
适用场景
- 如果你只需要确保用户提交了某个字段(允许用户留空,但必须有这个字段键),用
exists()。 - 如果你需要确保字段有实际内容,不能是空值,用
notEmpty()——实际开发中通常会和exists()组合使用,比如check('email').exists().notEmpty(),既保证字段存在,又保证有有效内容。
内容的提问来源于stack exchange,提问作者Jamal Ahmed
相关产品推荐
相关产品推荐

