📜  如何在 Node.js 中集成 Express-rate-limit ?(1)

📅  最后修改于: 2023-12-03 15:38:22.037000             🧑  作者: Mango

如何在 Node.js 中集成 Express-rate-limit?

简介

在网络应用程序中,为了保护服务器避免被攻击,我们需要对来自客户端的请求进行限制,以达到防止攻击的目的。为了实现请求限制,我们可以使用 express-rate-limit 插件,它是一个基于 Express 的请求限制中间件。该插件可以帮助我们限制同一个 IP 在一定时间内发送请求的数量,并可以自定义限制的时间窗口和最大请求数量。

安装
npm install --save express-rate-limit
使用
初始化

要使用这个插件,我们需要在我们的 Express 应用程序中初始化它。为了使用它,我们需要在我们的代码中引入它,使用以下代码:

const rateLimit = require("express-rate-limit");
配置

为了配置插件,我们需要传递一个配置对象作为参数。它可以包括以下选项:

  • windowMs - 定义限制的时间窗口(单位为毫秒),在该时间窗口内,限制的请求数量达到最大值后,将无法再接受更多的请求。默认为 1 分钟。
  • max - 定义时间窗口内允许的最大请求数量。默认为 100(请注意,这可能因计算机性能而异)。
  • message - 在请求超过最大请求数的情况下,自定义错误消息的字符串。
  • headers - 自定义消息头值。

下面是一个配置示例:

const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 minutes
  max: 100,
  message: "Too many requests!"
});
应用

接下来,我们需要将限制器插入我们的应用程序中。为了将插件添加到单个路由可以使用以下代码:

app.get("/api", limiter, (req, res, next) => {
  // handle request
});

如果要对所有路由应用限制,则可以使用以下代码:

app.use(limiter);
完整示例

下面是一个包括多个路由和自定义消息的完整示例:

const express = require("express");
const rateLimit = require("express-rate-limit");

const app = express();

// initialize limiter
const limiter = rateLimit({
  windowMs: 60 * 60 * 1000, // 1 hour
  max: 500,
  message: "Too many requests, please try again later."
});

// apply limiter to all routes
app.use(limiter);

// handle / route
app.get("/", (req, res) => {
  res.send("Hello World!");
});

// handle /api route
app.get("/api", (req, res) => {
  res.send("This is my API.");
});

// listen for requests
app.listen(3000, () =>
  console.log("Server is listening on port 3000.")
);

在这个例子中,在一小时内,对于来自同一 IP 的请求,最多只能发送 500 次请求。对于超出限制的请求,服务器会返回自定义消息 "Too many requests, please try again later."。

结论

此插件是一个简单且易于使用的请求限制中间件,它可以保护我们的服务器免受攻击。它的配置选项提供了足够的灵活性,以满足大多数需求。