📜  Node.js 中的 Express-rate-limit 是什么?(1)

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

Node.js 中的 Express-rate-limit

Express-rate-limit 是一个使用 Node.js 中的 Express 框架来实现限制请求次数和速率的中间件。该工具可以限制在指定时间内客户端针对某一个特定路由的请求次数和速率,以确保服务端不会被频繁的请求拖垮。

安装

Node.js 项目中使用 npm 包管理工具进行安装,命令如下:

npm install express-rate-limit
用法

使用 Express-rate-limit 非常简单,只需要将其作为 Express 的中间件即可。下面是一个简单的示例:

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

const app = express();

const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 分钟内
  max: 100 // 可以发起 100 个请求
});

app.use('/api/', limiter);

app.get('/api/test', (req, res) => {
  res.send('Hello world!');
});

app.listen(3000, () => console.log('Server started on port 3000'));

在上面的示例中,我们限制了 /api 路由下的请求在 15 分钟内只能发起 100 个请求,如果超出了这个限制,该路由会返回 429 Too Many Requests 以及一个 Retry-After 的响应头,其中 Retry-After 告诉客户端多久可以再次发送请求。

配置

Express-rate-limitrateLimit(options) 方法接受一个对象作为参数,该对象包含了以下配置项:

  • windowMs: 整数或函数,用来配置限流时间窗口,以毫秒为单位,默认值为 60000(即 1 分钟)。
  • max: 整数或函数,用来配置限制请求次数,可以是一个数字或一个返回数字的函数,默认值为 5
  • message: 用于自定义错误信息的函数,如果不定义,则默认返回 Too many requests, please try again later.
  • keyGenerator: 用于根据当前请求生成一个唯一的 key,用来进行请求计数和限速,默认使用客户端 IP。
  • handler: 用于自定义错误请求响应的函数,如果不定义,则使用默认的处理函数。
结语

到这里,我们就介绍了 Node.js 中的一个比较实用的中间件工具 Express-rate-limit。它可以有效地限制客户端的访问速率和请求数量,避免服务端被恶意攻击影响正常服务。在实际的项目开发中,它也是一个非常有用的工具。