架构: 添加请求频率限制中间件

This commit is contained in:
Architecture Designer 2026-03-10 09:14:19 +00:00
parent 83775c3b6a
commit 5e612ac064
2 changed files with 45 additions and 0 deletions

View File

@ -21,6 +21,8 @@ const PORT = process.env.PORT || 3000;
const corsMiddleware = require('./middleware/cors');
app.use(corsMiddleware);
const rateLimitMiddleware = require('./middleware/rateLimit');
app.use(rateLimitMiddleware);
app.use(express.json());
app.use(logger);

View File

@ -0,0 +1,43 @@
// 简单的请求频率限制中间件
const rateLimit = {};
const rateLimitMiddleware = (req, res, next) => {
const ip = req.ip || req.connection.remoteAddress;
const now = Date.now();
const windowMs = 60000; // 1分钟
const maxRequests = 100; // 每分钟最多100次
if (!rateLimit[ip]) {
rateLimit[ip] = { count: 1, resetTime: now + windowMs };
return next();
}
// 检查是否在时间窗口内
if (now > rateLimit[ip].resetTime) {
rateLimit[ip] = { count: 1, resetTime: now + windowMs };
return next();
}
// 检查请求次数
if (rateLimit[ip].count >= maxRequests) {
return res.status(429).json({
error: 'Too many requests',
retryAfter: Math.ceil((rateLimit[ip].resetTime - now) / 1000)
});
}
rateLimit[ip].count++;
next();
};
// 清理过期的记录每5分钟
setInterval(() => {
const now = Date.now();
for (const ip in rateLimit) {
if (now > rateLimit[ip].resetTime) {
delete rateLimit[ip];
}
}
}, 300000);
module.exports = rateLimitMiddleware;