我想编写一个快速中间件函数,它在响应的“结束”事件(如果存在)上设置一个侦听器。目的是根据最终处理程序决定发送的http响应代码进行清理,例如记录响应代码和数据库事务的回滚/提交。即,我希望此清理对最终调用者透明。
我想在 express 中执行以下操作:
路由中间件
function (req, res, next) {
res.on ('end', function () {
// log the response code and handle db
if (res.statusCode < 400) { db.commit() } else { db.rollback() }
});
next();
}
路线:
app.post ("/something", function (req, res) {
db.doSomething (function () {
if (some problem) {
res.send (500);
} else {
res.send (200);
}
});
}
当我尝试这个时,'end' 事件处理程序永远不会被调用。相同res.on('close')
,我在另一篇文章中读到。这样的事件会被解雇吗?
我能想到的唯一另一种方法是在自定义中间件中包装res.end
或使用我自己的版本。res.send
这并不理想,因为res.end
并且res.send
不接受回调,所以我不能只包装它们,调用原始代码,然后根据他们给我回电时设置的响应代码做我的事情(因为他们不会打电话我回来了)。
有没有一种简单的方法可以做到这一点?