/
1Rrd0
/
Course
Обзор
Документация
Войти
/
1Rrd0
/
Course
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/middleware/rateLimit.js
41 строка
941 B
dima
2
13 дек 2025, 10:58
13 дек 2025, 10:58
ce5a48e
Код
Авторство
О чём код?
const WINDOW_MS = 5 * 60 * 1000 const MAX_REQUESTS = 100 const requestsMap = new Map() function rateLimit(req, res, next) { const now = Date.now() const key = req.apiKey || req.ip // apiKey из authMiddleware let entry = requestsMap.get(key) if (!entry) { entry = { count: 0, windowStart: now } requestsMap.set(key, entry) } const elapsed = now - entry.windowStart if (elapsed > WINDOW_MS) { // новое окно entry.count = 0 entry.windowStart = now } entry.count += 1 const remaining = Math.max(MAX_REQUESTS - entry.count, 0) res.setHeader('X-Limit-Remaining', remaining) if (entry.count > MAX_REQUESTS) { const retryAfterSeconds = Math.ceil((WINDOW_MS - elapsed) / 1000) res.setHeader('Retry-After', retryAfterSeconds) return res.status(429).json({ error: 'Too many requests' }) } next() } module.exports = rateLimit