是否可以使用某种中间件'用快递发送回复后?

时间:2014-12-15 12:41:30

标签: node.js express

快递中的典型中间件在请求到达路由之前使用,例如首先进行身份验证,然后执行特定路由的代码,然后发送响应。

我想知道在路线被击中之后是否有可能像中间件这样的东西。

假设我有五条路线都响应了一些json,我想在每次路由其中一条路线时记录发送的json。
每当我在路线中发送回复时,我都可以手动记录,如下所示:

console.log(data);
res.json(data);

但这对我来说似乎是多余的。一个更好的方法可能是将它包装在函数中以调用路由,但这需要每次都像这样传递响应对象:

/* instead of the above */
send(data, res);

/* and then somewhere else usable for all routes */
function send(data, res) {
    console.log(data);
    res.json(data);
}
对我来说,这似乎有点像不好的做法,所以我想知道这是否是首选方式,或者是否有使用某种“中间件”的方法,这将允许以通常的方式发送响应并在此之后挂钩。

1 个答案:

答案 0 :(得分:3)

实际上不可能附加在路由之后执行的中间件,但是你可以执行一个中间件,它会在响应时绑定一个完成事件,

app.use(function(req, res, next){
  res.on('finish', function(){

    // Do whatever you want this will execute when response is finished
  });
  next();
});

https://stackoverflow.com/a/21858212/3556874