/
mmr97
/
laba1_API
Обзор
Документация
Войти
/
mmr97
/
laba1_API
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/middleware/idempotency.js
35 строк
1 KB
mmr97
upload files
01 дек 2025, 00:52
01 дек 2025, 00:52
844022e
Код
Авторство
О чём код?
// Simple idempotency middleware for POST requests. // Uses in-memory Map. Key: Idempotency-Key header + user id (if authenticated). // In production use Redis with TTL. const { idempotencyStore } = require('../store'); function idempotencyMiddleware(req, res, next) { if (req.method !== 'POST') return next(); const key = req.get('Idempotency-Key'); if (!key) return next(); const userPart = req.user ? `:${req.user.id}` : ':anon'; const composite = key + userPart; const entry = idempotencyStore.get(composite); if (entry) { // return stored response (status/body/headers) res.set(entry.headers || {}); return res.status(entry.status).json(entry.body); } // intercept send to record result const oldJson = res.json.bind(res); res.json = (body) => { // store idempotencyStore.set(composite, { status: res.statusCode || 200, headers: res.getHeaders ? res.getHeaders() : {}, body }); return oldJson(body); }; next(); } module.exports = { idempotencyMiddleware };