ExpressJs在为每个路由发送响应后执行回调

ExpressJs execute a callback after sending a response for every route

本文关键字:响应 执行 回调 路由 ExpressJs      更新时间:2023-09-26

该场景是将数据保存在缓存中。我们有许多用复杂逻辑编写的快递路线。

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

我试过以下方法。

  1. https://nodejs.org/api/http.html#http_event_close_1 -使用'close''finish',在发送响应后触发。但是我无法获得这些事件中的响应数据。
  2. 我的节点版本是v0.10.31
  3. 想到使用app.all('*',回调),但我不确定如何捕获缓存的响应数据。
  4. 最后我想到添加第二个回调路由,app。动词(路径,回调……], callback),但是在第一个回调中返回响应后,第二个回调永远不会被调用。

希望有一个解决方案,我被困在这个超过一个星期。

将逻辑添加到每条路由中是一项乏味的工作的原因是,我需要添加一个配置项,指定哪条路由需要用过期时间缓存。

响应需要缓存在redis server中。将根据路由数据和查询字符串生成缓存键。所有这些完整的用户特定信息将被保存在一个密钥中。

所以当用户点击相同的路由时,键将被生成来检查它是否已经存在,使用app。使用,数据将在不先于后续中间件的情况下提供。

定义一个回调中间件为,

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

添加到expressJs的应用中,

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

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