【发布时间】:2013-12-09 03:50:18
【问题描述】:
ExpressJS 中间件 req、res、next 有像 .on 和 .pipe 这样的钩子。
但我正在寻找 app.get 和 app.post 方法的挂钩。
【问题讨论】:
ExpressJS 中间件 req、res、next 有像 .on 和 .pipe 这样的钩子。
但我正在寻找 app.get 和 app.post 方法的挂钩。
【问题讨论】:
app.use() and middleware 可用于“before”,'close' 和 'finish' 事件的组合可用于“after”。 p>
app.use(function (req, res, next) {
function afterResponse() {
res.removeListener('finish', afterResponse);
res.removeListener('close', afterResponse);
// action after response
}
res.on('finish', afterResponse);
res.on('close', afterResponse);
// action before request
// eventually calling `next()`
});
app.use(app.router);
logger middleware 就是一个例子,默认情况下它会在响应之后附加到日志中。
只需确保在app.router 之前使用此“中间件”,因为顺序很重要。
【讨论】:
logger 同时监听 close 和 finish。据说这在某些情况下很有用。
res.end() 调用之前终止连接并且在res.send() 之后发出finish,则看起来像close 被发出
'finish' 事件在v0.10.0 之前的稳定版本中不存在。在此之前,两种情况都会发出'close' 事件——http.ServerResponse (v0.8.26) 和Writable Stream (v0.8.26)。但是,你说得对,'close' 不仅仅是为了向后支持,我已经对其进行了编辑。