我正在当前项目中实现Redis。有一些静态数据需要缓存。 我不想使用缓存逻辑的实现细节来污染控制器或其他服务中的业务逻辑。
因此,我创建了两个中间件功能。如果url与配置caching-endpoints.js
中定义的URL匹配,则用于缓存成功响应的结果。
module.exports = [
'/master-vehicles',
]
如果请求的网址与键匹配,另一个甚至可以在不命中控制器的情况下将响应发送回去。
因此,如果有人按下/vehicles
,则中间件将检查密钥是否存在于redis中,如果存在,它将返回响应或将控件传递给下一个中间件,并在生成响应后将其缓存
const cachingEndpoints = require("./caching-endpoints")
module.exports = async (req) => {
if (cachingEndpoints.includes(req.originalUrl))
await setKeyInCache(req.originalUrl, httpResponse)
}
const { getKeyFromCache } = require('../caching');
module.exports = () => async (req, res, next) => {
const result = await getKeyFromCache(req.originalUrl);
if (!result) return next();
return res.status(result.statusCode).send(result.body);
};
我在这里感到困惑,我基于端点/vehicles
进行缓存,并且应该仅用于GET
方法。
我也应该GET/vehicles
将其缓存吗?
请提出其他更好的选择,谢谢。