express-validator 从 v6 升级到 v7 迁移指南

express-validator 从 v6 升级到 v7 迁移指南

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

express-validator 是一个流行的 Express 中间件,用于验证和清理请求数据。本文将详细介绍从 v6 升级到 v7 版本需要进行的更改,帮助开发者顺利完成迁移。

环境要求变更

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

已移除的废弃 API

导入路径变更

v6.0.0 开始废弃的从 express-validator/checkexpress-validator/filter 导入的方式,在 v7 中已被完全移除。现在所有功能都应该直接从 express-validator 导入。

清理专用 API 移除

v7 移除了所有 sanitize 开头的函数,因为这些功能已经完全被 check 系列函数覆盖。以下是替换对照表:

| 旧函数 | 新函数 | |-----------------------|---------------| | sanitize(field) | check(field) | | sanitizeBody(field) | body(field) | | ... | ... |

TypeScript 类型变更

一些 TypeScript 类型名称也进行了简化:

| 旧类型 | 新类型 | |-----------------------|------------| | ValidationParamSchema | ParamSchema | | Validationchema | Schema |

验证器变更

isObject() 行为变化

isObject() 验证器的 strict 选项默认值从 false 改为 true。这意味着默认情况下不再允许数组和 null 值通过验证。

如果需要保持 v6 的行为,需要显式设置:

check('object').isObject({ strict: false })

验证错误格式变更

v7 对验证错误的格式做了较大调整,以支持更多错误类型。

属性名变更

param 属性已更名为 path,以避免与请求参数混淆:

const errors = validationResult(req).array();
console.log(`字段错误: ${errors[0].path}`);  // 以前是 param

错误类型区分

现在错误对象是一个可区分的联合类型,处理时需要根据类型进行不同处理:

const result = validationResult(req).formatWith(error => {
  switch (error.type) {
    case 'field':
      // 字段验证错误
      return `${error.path} 字段验证失败`;
    case 'alternative':
      // 替代验证错误
      return "提供的选项都不符合要求";
    // 其他类型处理...
  }
});

oneOf() 验证器变更

函数签名变化

oneOf() 的第二个参数从直接传递消息改为传递选项对象:

oneOf(
  [check('email'), check('phone')],
  { message: '至少提供一种联系方式' }
)

如果使用函数返回消息,现在会接收到嵌套错误信息:

oneOf([...], {
  message: (nestedErrors, req) => {
    // 可以访问嵌套错误
    return req.translate('one_of_error');
  }
})

错误类型配置

v7 为 oneOf() 添加了 errorType 选项来控制错误返回格式。要保持 v6 行为,需要:

oneOf([...], { errorType: 'flat' })

升级建议

  1. 首先确保 Node.js 版本符合要求
  2. 使用查找替换工具批量修改导入路径和函数名
  3. 特别注意 isObject() 的默认行为变化
  4. 检查所有错误处理逻辑,适应新的错误格式
  5. 测试 oneOf() 验证器的行为是否符合预期

升级完成后,建议全面测试应用的验证逻辑,确保所有边界情况都被正确处理。express-validator v7 的这些改进使 API 更加一致和灵活,虽然需要一些迁移工作,但长期来看会提高代码的可维护性。

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

咎鲲才

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

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

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

打赏作者

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

抵扣说明:

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

余额充值