推荐答案
// www.javascriptcn.com code example
const express = require('express');
const rateLimit = require('express-rate-limit');
const app = express();
// 创建限流中间件
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15分钟
max: 100, // 每个IP在15分钟内最多100次请求
message: '请求过于频繁,请稍后再试。'
});
// 应用限流中间件
app.use(limiter);
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});本题详细解读
1. 什么是 express-rate-limit?
express-rate-limit 是一个用于限制请求频率的中间件。它可以帮助你防止恶意用户通过频繁请求来攻击你的服务器,或者限制某些资源的访问频率。
2. 如何使用 express-rate-limit?
- 安装:首先需要通过 npm 安装
express-rate-limit包。npm install express-rate-limit
- 引入:在 Express 应用中引入
express-rate-limit。const rateLimit = require('express-rate-limit'); - 配置:创建一个限流中间件实例,并配置相关参数。
const limiter = rateLimit({ windowMs: 15 * 60 * 1000, // 时间窗口,单位是毫秒 max: 100, // 每个IP在时间窗口内允许的最大请求数 message: '请求过于频繁,请稍后再试。' // 超出限制时的响应消息 }); - 应用:将限流中间件应用到 Express 应用中。
app.use(limiter);
3. 参数说明
- windowMs:时间窗口的长度,单位为毫秒。例如,
15 * 60 * 1000表示15分钟。 - max:在时间窗口内,每个IP允许的最大请求数。超过这个数量后,后续请求将被拒绝。
- message:当请求被拒绝时,返回给客户端的消息。
4. 应用场景
- 防止DDoS攻击:通过限制每个IP的请求频率,可以有效防止分布式拒绝服务攻击(DDoS)。
- API限流:对于公开的API接口,可以通过限流来防止滥用,确保服务的稳定性。
- 资源保护:对于某些敏感或资源消耗较大的接口,可以通过限流来保护服务器资源。