快递中的典型中间件在请求到达路由之前使用,例如首先进行身份验证,然后执行特定路由的代码,然后发送响应。
我想知道在路线被击中之后是否有可能像中间件这样的东西。
假设我有五条路线都响应了一些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);
}
对我来说,这似乎有点像不好的做法,所以我想知道这是否是首选方式,或者是否有使用某种“中间件”的方法,这将允许以通常的方式发送响应并在此之后挂钩。
答案 0 :(得分:3)
实际上不可能附加在路由之后执行的中间件,但是你可以执行一个中间件,它会在响应时绑定一个完成事件,
app.use(function(req, res, next){
res.on('finish', function(){
// Do whatever you want this will execute when response is finished
});
next();
});