ExpressJs在为每条路线

时间:2015-07-29 12:27:26

标签: javascript node.js caching express callback

方案是将数据保存在缓存中。我们有许多用复杂逻辑编写的快速路线。

我必须找到一种方法来将响应数据保存在缓存中。我不能去每一条路线,检查是否需要保存并在发送响应之前保存数据。 (如果没有其他去,那么这可能就是这样)

我尝试了以下方法。

  1. https://nodejs.org/api/http.html#http_event_close_1 - 使用'关闭''完成',在发送响应后触发即可。但是我无法在这些事件中获得响应数据。
  2. 我的节点版本还是 v0.10.31
  3. 使用app.all('*', callback)的想法,但我不知道如何捕获缓存的响应数据。
  4. 最后我想为路由添加第二个回调, app.VERB(路径,[回调...],回调),但是在第一次回调中返回响应时,第二次回调永远不会调用。
  5. 希望有一个解决方案,我坚持了一个多星期。

    为每个路由添加逻辑是一项繁琐的工作的原因是,我需要添加一个配置条目,指定需要缓存哪个路由以及到期时间。

    需要在 redis服务器中缓存响应。将基于路由数据和查询字符串生成缓存密钥。所有这些完整的用户特定信息将保存在密钥中。

    因此,当用户点击相同的路线时,将生成密钥以使用 app.use 检查密钥是否已存在,并且数据将在不预先添加的情况下提供连续的中间件。

1 个答案:

答案 0 :(得分:0)

将回调中间件定义为

var storeResponseMiddleware = function(req, res, next) {
  console.log("storing data in redis....")
  ..........more stuff
}

将它添加到expressJs app,

app.use(logicRoute)
app.use(storeResponseMiddleware)

现在,将调用所有响应storeResponseMiddleware。你必须在路由处理程序中调用next()