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

如何在Strapi v4中为contact-uses接口集成koa2-ratelimit做频率限制

解决Strapi v4中POST /api/contact-uses接口的限流问题(每分钟1次)

步骤1:安装依赖

首先安装koa2-ratelimit:

npm install koa2-ratelimit --save

步骤2:创建自定义限流中间件

在Strapi项目的src/middlewares目录下新建rate-limit文件夹,里面创建index.js文件,写入以下代码:

const rateLimit = require('koa2-ratelimit').RateLimit;

module.exports = (strapi) => {
  return {
    initialize() {
      // 配置限流规则:每分钟最多1次请求
      const contactLimiter = rateLimit({
        interval: 60 * 1000, // 1分钟(毫秒单位)
        max: 1, // 允许的最大请求次数
        prefixKey: 'contact-form', // 自定义键前缀,区分不同接口的限流统计
        message: '请求过于频繁,请1分钟后再试',
        headers: true, // 返回限流相关的响应头(剩余次数、重置时间等)
      });

      // 给POST /api/contact-uses接口绑定限流规则
      strapi.server.router.post('/api/contact-uses', contactLimiter);
    },
  };
};

步骤3:注册中间件

打开项目根目录的config/middlewares.js,将自定义的rate-limit中间件添加到数组中(建议放在strapi::bodyParser之后、strapi::router之前,确保请求解析完成后再做限流判断):

module.exports = [
  'strapi::errors',
  'strapi::security',
  'strapi::cors',
  'strapi::poweredBy',
  'strapi::logger',
  'strapi::query',
  'strapi::bodyParser',
  'rate-limit', // 这里添加自定义限流中间件
  'strapi::session',
  'strapi::favicon',
  'strapi::public',
];

步骤4:测试验证

重启Strapi服务,然后多次发送POST请求到/api/contact-uses:第一次请求会正常响应,之后1分钟内的重复请求会返回429 Too Many Requests状态码,并显示你设置的提示信息。

补充说明

  • 上述方案使用内存存储限流数据,Strapi重启后限流计数会重置;如果是生产环境需要持久化统计,可以配置Redis存储,具体修改rateLimit配置中的store项即可(参考koa2-ratelimit官方参数说明)。
  • 若需给多个接口限流,可在中间件中添加更多strapi.server.router.xxx调用,或通过路由匹配规则批量处理。

内容的提问来源于stack exchange,提问作者Subin Kurian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 11:20:05