Express-Validator 从 v5 迁移到 v6 完全指南
express-validator 项目地址: https://gitcode.com/gh_mirrors/exp/express-validator
前言
Express-Validator 是 Express 框架中用于数据验证和清理的重要中间件。随着版本 6 的发布,该库进行了重大重构,带来了更现代化的 API 设计和更好的异步支持。本文将详细介绍如何将项目从 v5 迁移到 v6 版本。
环境要求变更
首先需要注意的是,v6 版本不再支持 Node.js 6。如果你的项目还在使用 Node.js 6,需要先升级到 Node.js 8 或更高版本。
从传统 API 迁移到检查 API
Express 应用配置变更
在 v5 版本中,我们通常通过 app.use(expressValidator())
来全局配置验证器。在 v6 中,这种集中式配置已被移除,改为更模块化的方式:
// v5 版本
const expressValidator = require('express-validator');
app.use(expressValidator());
// v6 版本 - 不再需要这行代码
路由处理器的修改
验证/清理链的语法变化
v6 版本引入了全新的链式 API,主要变化包括:
- 所有验证方法现在需要从主模块导入
- 每个验证链需要添加
.run(req)
调用 - 方法命名更加一致和直观
以下是新旧 API 对比表:
| 旧方法 (v5) | 新方法 (v6) | 说明 | |------------|------------|------| | req.check()
| check()
| 通用验证方法 | | req.checkBody()
| body()
| 专门验证请求体 | | req.sanitize()
| sanitize()
| 通用清理方法 | | req.sanitizeQuery()
| sanitizeQuery()
| 专门清理查询参数 |
示例迁移:
// v5 版本
req.checkBody('email').isEmail();
req.sanitizeBody('message').escape().trim();
// v6 版本
await body('email').isEmail().run(req);
await sanitizeBody('message').escape().trim().run(req);
自定义验证器和清理器
在 v5 中,自定义验证器和清理器是通过中间件选项全局注册的。v6 改为在每个验证链中直接定义:
// v5 全局注册
app.use(expressValidator({
customValidators: { isEmailNotInUse },
customSanitizers: { muteOffensiveWords }
}));
// v6 链式定义
await body('email').custom(isEmailNotInUse).run(req);
await sanitize('message').customSanitizer(muteOffensiveWords).run(req);
验证错误处理
错误处理 API 也发生了变化,变得更加直观:
// v5 获取错误
const errors = req.validationErrors();
// v6 获取错误
const errors = validationResult(req).array();
如果需要自定义错误格式,可以创建自定义的验证结果处理器:
const myValidationResult = validationResult.withDefaults({
formatter: (param, msg, value) => {
// 自定义错误格式
return `${param}: ${msg}`;
}
});
const errors = myValidationResult(req).array();
废弃的功能
v6 版本废弃了从 express-validator/check
和 express-validator/filter
导入的方式。现在所有功能都可以直接从主模块导入:
// 不再推荐
const { check } = require('express-validator/check');
const { sanitize } = require('express-validator/filter');
// 推荐方式
const { check, sanitize } = require('express-validator');
其他重大变更
除了上述主要变化外,v6 版本还包括以下重要变更:
- 完全支持 Promise 和 async/await
- 验证链现在是不可变的,每次调用方法都会返回新实例
- 改进了类型定义,对 TypeScript 用户更友好
- 性能优化,减少了内存使用
迁移建议
- 逐步迁移:可以逐个路由进行迁移,不必一次性修改所有代码
- 测试覆盖:确保有足够的测试用例覆盖验证逻辑
- 团队沟通:如果项目有多人协作,确保团队成员了解 API 变化
- 文档更新:更新项目内部文档,反映新的验证方式
总结
Express-Validator v6 通过现代化的 API 设计提供了更清晰、更一致的验证体验。虽然迁移需要一些手动工作,但新版本带来的改进值得投入。本文涵盖了从 v5 迁移到 v6 的主要方面,按照这些步骤操作,你应该能够顺利完成升级。
如果在迁移过程中遇到特定问题,建议查阅 v6 的详细文档,了解每个 API 的具体用法和变更原因。
express-validator 项目地址: https://gitcode.com/gh_mirrors/exp/express-validator
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考