在快速中间件中记录请求和响应

2024-03-05

我正在尝试实现一个记录器Express http://expressjs.com应用。我需要它能够记录请求以及为每个请求发回的响应(状态代码和正文)。我开始编写一个如下所示的中间件:

function (req, res, next) {
    ...
    res.on('finish', function () {
       Logger.debug('For request', req);
       Logger.debug('Response sent');
    });
    ...
}

我需要访问传递给的数据res用于发送响应的对象方法。例如,如果在一个控制器中我有:

res.json({ foo: 'bar' })

我需要一种方法来实现它{ foo: 'bar' }对象,可能是这样的:

function (req, res, next) {
    ...
    res.on('finish', function () {
       Logger.debug('For request', req);
       var data = res.data; // or res.body, or whatever
       Logger.debug('Response: ' + res.statusCode, data);
    });
    ...
}

Express中有没有什么属性或方法res我可以用这个对象吗?或者,是否有更好的策略来记录请求及其响应?


您需要一个事件侦听器,该事件侦听器将在调用response.end(或send)方法时触发。Express 没有这样的监听器,但 Node.js 原始 api 有。

a finishNode.js http 服务器实例中的事件 https://nodejs.org/api/http.html#http_event_finish这使您能够在将回复发送给客户后进行一些操作。

您可以轻松地与现有的 Express 服务器集成:

response.on('finish', () => {
  // Do your logging here.
});

我建议在请求期间将日志保存在 javascript 对象中,并在发送响应时在完成事件的回调中发送它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在快速中间件中记录请求和响应 的相关文章

随机推荐