chroma-log
Version:
A Colourful and minimal HTTP request logging middleware for node.js
42 lines (33 loc) • 1.27 kB
JavaScript
const chalk = require('chalk');
const getDurationInMilliseconds = (start) => {
const NS_PER_SEC = 1e9;
const NS_TO_MS = 1e6;
const diff = process.hrtime(start);
return (diff[0] * NS_PER_SEC + diff[1]) / NS_TO_MS;
};
function logPose(req, res, next) {
const start = process.hrtime();
function GetColour(code) {
if (code >= 200 && code < 300) {
return chalk.greenBright.underline(code);
}
if (code >= 300 && code < 400) {
return chalk.blueBright.underline(code);
}
if (code >= 400 && code < 500) {
return chalk.yellowBright.underline(code);
}
if (code >= 500) {
return chalk.redBright.underline(code);
}
}
const { url } = req;
res.on('finish', () => {
const responseCode = res.statusCode;
GetColour(responseCode);
// eslint-disable-next-line no-console
console.log(`${chalk.magentaBright(req.method)}: ${chalk.whiteBright('')}${GetColour(responseCode)}${chalk.whiteBright('')} ${chalk.cyanBright('->')}${chalk.redBright(' [ ')}${chalk.underline.whiteBright(url)}${chalk.redBright(' ]')} ${chalk.cyanBright('-> ')}${getDurationInMilliseconds(start).toLocaleString()}ms${chalk.cyanBright('')}`);
});
next();
}
module.exports = logPose;