Express.js request time middleware

JS
S
JavaScript

Simple and performant middleware to track request-response times.

1import logService from '../services/log';
2
3function logResponseTime(req: any, res: any, next: any) {
4  const startHrTime = process.hrtime();
5  const path = req.method + req.url;
6
7  res.on('finish', () => {
8    const elapsedHrTime = process.hrtime(startHrTime);
9    const elapsedTimeInMs = elapsedHrTime[0] * 1000 + elapsedHrTime[1] / 1e6;
10    logService.log('info', `Request Completed at ${elapsedTimeInMs}ms`, { path });
11    if (elapsedTimeInMs > 5000) {
12      logService.log('warning', 'Slow query detected:', { path, time: `${elapsedTimeInMs}ms` });
13    }
14    if (elapsedTimeInMs > 15000) {
15      logService.log('error', 'Super Slow query detected:', { path, time: `${elapsedTimeInMs}ms` });
16    }
17  });
18
19  next();
20}
21
22export { logResponseTime };
23

Created on 10/18/2020