node.js - 在用express发送响应后是否可以使用某种 'middleware'?

标签 node.js express

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

我想知道路由被命中后是否可以有像中间件这样的东西。

假设我有 5 个路由,它们都以一些 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);
}

这对我来说似乎也有点不好,所以我想知道这是否是首选方式,或者是否有办法使用某种“中间件”,这将允许以通常的方式发送响应方式并在那之后 Hook 。

最佳答案

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

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

关于node.js - 在用express发送响应后是否可以使用某种 'middleware'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27484361/

相关文章:

node.js - 如何在 mongodb 的输出查询上添加条件字段?

Node.js 事件代理

javascript - 将原始 html 快速渲染为文本

javascript - 带有 Promises 的构造函数中的同步代码

node.js - RangeError [ERR_OUT_OF_RANGE] : The value of "value" is out of range. 它必须 >= 0 且 <= 4294967295。已收到 9433906525

javascript - 为什么我在nodejs中找不到模块?

node.js - sinon 否认一个 stub 被调用,即使它被调用了

node.js - CasperJS 与 MongoDB NPM 模块

node.js - 通过 cron 将 Grunt 和 Node 作为批处理文件运行

javascript - 传递/路由包含函数原型(prototype)的对象