有没有办法监控 Express.js 中的每个响应?

Ris*_*shi 2 node.js express

我想在express.js 中创建一个中间件函数。它可以监控每个请求和响应。我创建了一个中间件,但它只能监视请求,而不能监视响应。

function middlewareFunc (req,res,next) {
  console.log(req.body , req.params , req.query);
  next();
}
Run Code Online (Sandbox Code Playgroud)

Bla*_*mba 5

你应该知道resinfunction(req, res, next)是 class 的一个实例http.ServerResponse。所以它可以监听finish事件,请参阅链接:https ://nodejs.org/api/stream.html#stream_event_finish

app.use(function (req, res, next) {
    function afterResponse() {
        res.removeListener('finish', afterRequest);
        res.removeListener('close', afterRequest);

        // action after response
    }

    res.on('finish', afterResponse);
    res.on('close', afterResponse);

    // action before request
    // eventually calling `next()`
});

app.use(app.router);
Run Code Online (Sandbox Code Playgroud)

app.use()和 中间件可用于“之前”,并且closefinish事件的组合可用于“之后”。