推荐答案
在 Express 中限制请求频率可以通过使用 express-rate-limit 中间件来实现。以下是一个简单的示例:
// 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. 配置选项
windowMs: 定义时间窗口的长度,单位为毫秒。例如,15 * 60 * 1000表示15分钟。max: 定义在时间窗口内允许的最大请求次数。例如,100表示每个IP在15分钟内最多允许100次请求。message: 当请求超过限制时,返回给客户端的消息。
3. 应用中间件
通过 app.use(limiter) 将限制中间件应用到所有路由上。你也可以根据需要将中间件应用到特定的路由上。
4. 其他注意事项
- 你可以通过
skip选项来跳过某些请求的限制,例如跳过某些IP地址或特定路径的请求。 express-rate-limit还支持存储请求计数的方式,默认使用内存存储,但你也可以配置为使用 Redis 等外部存储。
通过这种方式,你可以有效地控制请求频率,保护你的应用免受恶意请求的影响。