From d4501dc333be39874a49f265daf3bf823f08d0a5 Mon Sep 17 00:00:00 2001 From: Janno Stern Date: Mon, 3 Jun 2024 12:52:26 +0300 Subject: [PATCH] Implement logging middleware --- lib/requestLoggerMiddleware.js | 30 ++++++++++++++++++++++++++++++ server.js | 6 ++++++ 2 files changed, 36 insertions(+) create mode 100644 lib/requestLoggerMiddleware.js diff --git a/lib/requestLoggerMiddleware.js b/lib/requestLoggerMiddleware.js new file mode 100644 index 0000000..727a36f --- /dev/null +++ b/lib/requestLoggerMiddleware.js @@ -0,0 +1,30 @@ +/** + * @param res Original Response Object + * @param send Original UNMODIFIED res.send function + * @return A patched res.send which takes the send content, binds it to contentBody on + * the res and then calls the original res.send after restoring it + */ +const resDotSendInterceptor = (res, send) => (content) => { + res.contentBody = content; + res.send = send; + res.send(content); +}; + +export const requestLoggerMiddleware = + ({ logger }) => + (req, res, next) => { + logger( + `Request: {method: ${req.method}, url: ${ + req.url + }, params: ${JSON.stringify(req.params)}, query: ${JSON.stringify( + req.query + )}, body: ${JSON.stringify(req.body)}` + ); + res.send = resDotSendInterceptor(res, res.send); + res.on("finish", () => { + logger( + `Response: {statusCode: ${res.statusCode}, responseData: ${res.contentBody}}` + ); + }); + next(); + }; diff --git a/server.js b/server.js index 55b205d..b3f66c2 100644 --- a/server.js +++ b/server.js @@ -8,6 +8,7 @@ import secrets from "./controllers/secrets.js"; import fs from "fs"; import files from "./controllers/files.js"; import crypto from "crypto"; +import bodyParser from "body-parser"; import encryption from "./controllers/encryption.js"; import decryption from "./controllers/decryption.js"; @@ -31,6 +32,7 @@ import validate from "./controllers/validate.js"; import utils from "./controllers/utils.js"; import domain from "./controllers/domain.js"; import forms from "./controllers/forms.js"; +import { requestLoggerMiddleware } from "./lib/requestLoggerMiddleware.js"; const __dirname = path.dirname(fileURLToPath(import.meta.url)); const { publicKey, privateKey } = crypto.generateKeyPairSync("rsa", { @@ -49,6 +51,10 @@ const rateLimit = setRateLimit({ statusCode: 429, }); +app.use(bodyParser.json()); +app.use(bodyParser.text()); +app.use(requestLoggerMiddleware({ logger: console.log })); + app.use(express.json()); app.use("/file-manager", files); app.use("/conversion", conversion);