You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用express-rate-limit为Express单条路由配置多套不同限流规则

问题根因

你当前的限流逻辑未触发,核心原因是你仅在switch分支中引用了限流中间件实例,没有实际调用中间件处理请求,直接执行next()跳转到了后续业务逻辑,限流校验逻辑完全没有运行。

解决方案

无需为每个限流规则单独创建路由,直接在匹配到对应规则后,调用选中的限流中间件即可。修正后的代码如下:

router.route('/sign-upload').post(function (req, res, next) {
  let targetLimiter
  switch (req.body.qty) {
    case 'one':
      targetLimiter = B1Limiter
      break
    case '10-50':
      targetLimiter = B10To50Limiter
      break
    case '50-250':
      targetLimiter = B50To250Limiter
      break
    case '250-1000':
      targetLimiter = B250To1kLimiter
      break
    default:
      targetLimiter = B1Limiter
      break
  }
  // 执行选中的限流中间件,限流通过后会自动调用next进入后续的signUpload逻辑
  targetLimiter(req, res, next)
}, signUpload)
注意事项
  • 请确保当前路由之前已经注册了请求体解析中间件(如express.json()、express.urlencoded()),否则req.body.qty无法正常读取,会始终触发默认限流规则。
  • 不同限流规则的计数互相独立,不同qty参数的请求会分别统计调用次数,符合业务逻辑预期。

内容的提问来源于stack exchange,提问作者Himanshu Walimbe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 08:54:03