【发布时间】:2015-10-20 10:19:01
【问题描述】:
场景是将数据保存在缓存中。我们有许多用复杂逻辑编写的快速路线。
我必须想办法将响应数据保存在缓存中。我无法前往每条路线并检查是否需要保存并在发送响应之前保存数据。 (如果没有其他走,那么可能就是这样)
我尝试了以下方法。
- https://nodejs.org/api/http.html#http_event_close_1 - 使用 'close' 或 'finish',在发送响应后触发就可以了。但是我无法获得这些事件中的响应数据。
- 另外我的节点版本是 v0.10.31
- 想过使用app.all('*', callback),但我不知道如何捕获响应数据以进行缓存。
- 最后我想为路由添加第二个回调,app.VERB(path, [callback...], callback),但是在第一个回调中返回响应时,第二个回调永远不会调用。
希望有一个解决方案,我被困了一个多星期。
在每个路由中添加逻辑是一项繁琐的工作的原因是,我需要添加一个配置条目,指定需要缓存的路由以及到期时间。
响应需要缓存在 redis 服务器中。将根据路由数据和查询字符串生成缓存键。所有这些完整的用户特定信息都将保存在一个密钥中。
因此,当用户点击相同的路线时,将使用 app.use 生成密钥以检查它是否已经存在,并且将提供数据而不会先于连续的中间件。
【问题讨论】:
-
我有点困惑,这个应该为所有用户缓存的响应数据是相同的,还是以某种方式涉及会话?
app.use检查 url 并输出适当的标头以缓存内容怎么样。你所说的“缓存”是指以快递方式保存数据,还是实际的浏览器缓存或什么? -
@adeneo 响应需要缓存在 redis 服务器中。将根据路由数据和查询字符串生成缓存键。所有这些完整的用户特定信息都将保存在一个密钥中。因此,当用户点击相同的路线时,将使用 app.use 生成密钥以检查它是否已经存在,并且将提供数据而无需先于后续的中间件。
-
为什么不在发送响应后立即在路由中添加缓存逻辑?您可以在发送响应后执行代码。
-
@GeorgeEracleous 感谢您的回复。我完全知道我可以在发送响应之前或之后缓存。由于配置了近 45 条路由,我不想更改每条路由中的回调代码以在发送之前/之后缓存响应。我只是想知道是否有人尝试在不修改回调的情况下实现这一目标。希望我很清楚。
标签: javascript node.js caching express callback