express-validator 7.3.x 教程导航
本系列面向 Express 5 + TypeScript 项目,基于当前工程安装的 express-validator@7.3.2 和官方 7.3 文档编写。
为什么需要 express-validator
TypeScript 只能检查服务端源码,不能保证客户端真的按接口类型发送数据:
interface CreateWishBody {
name: string;
content: string;
}
客户端仍然可能发送:
{
"name": 100,
"content": null,
"isAdmin": true
}
express-validator 的职责是验证和清洗 HTTP 边界上的不可信数据。
HTTP 请求
→ express.json()/urlencoded()
→ ValidationChain/checkSchema
→ validationResult()
→ matchedData()
→ Controller
→ Service
→ Sequelize/MySQL
学习顺序
- 01 基础与执行流程
- 02 ValidationChain 高频 API
- 03 ValidationChain 进阶
- 04 错误结果与 matchedData
- 05 checkSchema
- 06 ExpressValidator 类
- 07 组合校验与手动执行
- 08 项目最佳实践
使用频率速查
每个项目都会用
body / query / param
isString / isInt / isLength / isEmail / notEmpty
optional / bail / withMessage
trim / toInt / normalizeEmail
validationResult / matchedData
经常使用
custom / customSanitizer / if / exists
isArray / isObject
checkSchema / checkExact / oneOf
字段通配符 items.*.id
特定场景使用
ExpressValidator
hide / default / replace / not
globstar (**)
手动运行 ValidationChain.run(req)
三层边界
| 层次 | 负责什么 | 例子 |
|---|---|---|
| express-validator | HTTP 输入是否合法 | page 是否为正整数 |
| Service | 当前操作是否允许 | 用户是否有权修改愿望 |
| MySQL | 最终数据约束 | NOT NULL、唯一键、外键 |
校验通过不代表业务一定成功,也不能代替数据库约束。