Express-Validator 项目中的 Sanitization Chain API 详解

Express-Validator 项目中的 Sanitization Chain API 详解

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

什么是 Sanitization Chain

Sanitization Chain(净化链)是 express-validator 中的一个中间件概念,它允许开发者对传入的请求数据进行一系列的净化处理。与验证链类似,净化链可以包含多个净化器,这些净化器会按照添加顺序依次执行,最终得到处理后的数据。

基本用法

净化链通常被传递给 Express 的路由处理器。下面是一个简单的示例:

const { body } = require('express-validator');
app.get('/', body('trimMe').trim(), (req, res, next) => {
  // 如果 req.body.trimMe 原来是 "  something "
  // 经过处理后将会变成 "something"
  console.log(req.body.trimMe);
});

在这个例子中,我们使用了 .trim() 净化器来去除字符串两端的空白字符。

标准净化器

express-validator 内置了 validator.js 提供的所有净化方法,这些被称为"标准净化器"。常见的有:

  • trim():去除字符串两端的空白字符
  • toInt():将字符串转换为整数
  • normalizeEmail():标准化电子邮件地址
  • escape():转义 HTML 特殊字符

需要注意的是,validator.js 只接受字符串作为输入,因此任何需要被标准净化器处理的值(包括数组和对象)都会首先被转换为字符串类型。

扩展方法

除了标准净化器外,express-validator 还提供了一些额外的净化方法:

自定义净化器 .customSanitizer()

允许开发者定义自己的净化逻辑:

param('id').customSanitizer((value, { req }) => {
  return req.query.type === 'user' ? ObjectId(value) : Number(value);
})

默认值 .default()

当值为空字符串、null、undefined 或 NaN 时,使用指定的默认值:

body('username').default('foo')

替换值 .replace()

当值匹配给定数组中的任意元素时,替换为新的值:

body('username').replace(['bar', 'BAR'], 'foo')

强制运行 .run()

以命令式的方式运行净化链:

await check('content').escape().trim().run(req);

转换为数组 .toArray()

将值转换为数组,undefined 会转换为空数组:

body('checkboxes').toArray()

大小写转换

  • .toLowerCase():转换为小写
  • .toUpperCase():转换为大写

实际应用场景

  1. 用户输入净化:去除多余空格、转义特殊字符防止安全问题
  2. 数据标准化:统一日期格式、电话号码格式等
  3. 类型转换:将字符串转换为数字、布尔值等
  4. 默认值处理:为可选字段提供默认值

最佳实践

  1. 净化顺序很重要:先进行类型转换,再进行格式处理
  2. 结合验证使用:先验证数据有效性,再进行净化处理
  3. 注意性能:避免不必要的净化操作
  4. 记录原始值:在某些场景下可能需要保留原始数据

通过合理使用 express-validator 的净化链功能,可以大大提高应用程序的数据质量和安全性,减少因数据格式问题导致的错误和潜在风险。

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

明咏耿Helena

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

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

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

打赏作者

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

抵扣说明:

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

余额充值