javascript - Logging requests and responses in express middleware -
i'm trying implement logger in express application. need able log requests , response (status code , body) sent each request. started writing middleware looks this:
function (req, res, next) { ... res.on('finish', function () { logger.debug('for request', req); logger.debug('response sent'); }); ... } i need access data passed res object method used send response. example, if in 1 controller had:
res.json({ foo: 'bar' }) i need way { foo: 'bar' } object, maybe:
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); }); ... } is there property or method in express res object use that? or, there better strategy logging requests , responses them?
you need event listener triggered when response.end (or send) methods called. express doesn't have such listener node.js raw api have.
there a finish event in node.js http server instances makes able things after sent response client.
you can integrate existing express server:
response.on('finish', () => { // logging here. }); i recommend save logs in javascript object during request , send them inside of finish event's callback when response has sent.