在高速中间件中logging请求和响应
我试图在快速应用程序中实现一个logging器。 我需要它能够logging请求,并为每个请求发回响应(状态码和正文)。 我开始写一个看起来像这样的中间件:
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
对象中是否有任何属性或方法可供我使用? 或者,是否有更好的logging请求和响应的策略?
您需要一个事件侦听器,当调用response.end(或send)方法时将触发该事件侦听器。 Express没有这样的监听器,但是node.js raw api确实有。
在node.js http服务器实例中有一个finish
事件,它使您能够在将响应发送到客户端之后执行某些操作。
您可以轻松地与现有的Express服务器集成:
response.on('finish', () => { // Do your logging here. });
我build议在请求期间将日志保存在JavaScript对象中,并在发送响应时将它们发送到完成事件的callback中。