41 lines
958 B
JavaScript
41 lines
958 B
JavaScript
const cache = require('../utils/redis');
|
|
|
|
// Middleware для кэширования GET запросов
|
|
const cacheMiddleware = (ttl = 300) => {
|
|
return async (req, res, next) => {
|
|
// Кэшировать только GET запросы
|
|
if (req.method !== 'GET') {
|
|
return next();
|
|
}
|
|
|
|
if (!cache.isConnected()) {
|
|
return next();
|
|
}
|
|
|
|
const key = `cache:${req.originalUrl}`;
|
|
|
|
try {
|
|
const cachedData = await cache.get(key);
|
|
|
|
if (cachedData) {
|
|
return res.json(cachedData);
|
|
}
|
|
|
|
// Перехватить res.json для сохранения в кэш
|
|
const originalJson = res.json.bind(res);
|
|
res.json = (data) => {
|
|
cache.set(key, data, ttl);
|
|
return originalJson(data);
|
|
};
|
|
|
|
next();
|
|
} catch (error) {
|
|
console.error('Cache middleware error:', error);
|
|
next();
|
|
}
|
|
};
|
|
};
|
|
|
|
module.exports = cacheMiddleware;
|
|
|