express-validator 从 v5 迁移到 v6 的完整指南

express-validator 从 v5 迁移到 v6 的完整指南

express-validator express-validator 项目地址: https://gitcode.com/gh_mirrors/exp/express-validator

express-validator 是一个流行的 Express 中间件,用于验证和清理用户输入数据。从 v5 升级到 v6 版本带来了一些重要的变化,本文将详细介绍迁移过程中需要注意的关键点。

环境要求变更

首先需要注意的是,v6 版本不再支持 Node.js 6。如果你的项目还在使用 Node.js 6,需要先升级到 Node.js 8 或更高版本。

从旧版 API 迁移到检查 API

如果你之前使用的是 express-validator 的旧版 API,那么需要进行以下迁移步骤。

应用初始化配置

在 v5 版本中,我们通常这样初始化 express-validator:

const expressValidator = require('express-validator');
app.use(expressValidator());

在 v6 中,这种全局中间件的方式已被移除。你需要删除这行代码,改为在路由处理程序中直接使用验证器。

路由处理程序中的验证链

v6 版本对验证和清理链的语法做了重大调整。以下是新旧 API 的对比:

| 旧版方法 | 新版方法 | |---------------------------|----------------------------| | req.check(field) | await check(field) | | req.checkBody(field) | await body(field) | | req.sanitize(field) | await sanitize(field) | | req.sanitizeBody(field) | await sanitizeBody(field)|

此外,每个验证链末尾都需要添加 .run(req) 方法调用。

示例迁移:

// 旧版 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 中,我们可以全局注册自定义验证器和清理器:

app.use(expressValidator({
  customValidators: { isEmailNotInUse },
  customSanitizers: { muteOffensiveWords }
}));

v6 版本中,这些需要在每个验证链中单独定义:

await body('email').custom(isEmailNotInUse).run(req);
await sanitize('message').customSanitizer(muteOffensiveWords).run(req);

验证错误处理

错误处理的 API 也发生了变化:

| 旧版方法 | 新版方法 | |---------------------------------|-----------------------------------| | req.validationErrors() | validationResult(req).array() | | req.getValidationResult() | validationResult(req) |

如果你在 v5 中使用了自定义错误格式化器,可以这样迁移:

// 创建自定义验证结果处理器
const myValidationResult = validationResult.withDefaults({
  formatter: errorFormatter
});

// 使用方式
const errors = myValidationResult(req).array();

废弃的导入方式

v6 版本废弃了从 express-validator/checkexpress-validator/filter 导入的方式。现在所有功能都可以直接从主模块导入:

// 不再推荐
const { check } = require('express-validator/check');
const { sanitize } = require('express-validator/filter');

// 推荐方式
const { check, sanitize } = require('express-validator');

其他重大变更

除了上述主要变化外,v6 版本还包括以下重要变更:

  1. 验证链现在是不可变的,每次方法调用都会返回一个新实例
  2. 验证结果对象提供了更多实用方法
  3. 性能优化和改进的错误处理机制

迁移建议

  1. 逐步迁移:对于大型项目,建议逐步迁移,可以先从简单的路由开始
  2. 测试覆盖:确保有足够的测试覆盖,特别是在验证逻辑复杂的部分
  3. 团队沟通:如果项目由多人维护,确保所有开发者了解 API 变更
  4. 文档更新:更新项目内部文档,反映新的验证器使用方式

通过遵循这些指南,你应该能够顺利将 express-validator 从 v5 迁移到 v6 版本,并利用新版本提供的改进功能和更好的性能。

express-validator express-validator 项目地址: https://gitcode.com/gh_mirrors/exp/express-validator

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杭律沛Meris

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值