feat: add request id middleware for api responses

This commit is contained in:
Nico 2026-02-16 01:10:26 -08:00
parent 7fb28e659f
commit b3f607d8f8
2 changed files with 47 additions and 8 deletions

View File

@ -1,10 +1,12 @@
const express = require("express"); const express = require("express");
const cors = require("cors"); const cors = require("cors");
const path = require("path"); const path = require("path");
const User = require("./models/user.model"); const User = require("./models/user.model");
const requestIdMiddleware = require("./middleware/request-id");
const app = express();
app.use(express.json()); const app = express();
app.use(requestIdMiddleware);
app.use(express.json());
// Serve static files from public directory // Serve static files from public directory
app.use('/test', express.static(path.join(__dirname, 'public'))); app.use('/test', express.static(path.join(__dirname, 'public')));
@ -54,4 +56,4 @@ app.use("/households", householdsRoutes);
const storesRoutes = require("./routes/stores.routes"); const storesRoutes = require("./routes/stores.routes");
app.use("/stores", storesRoutes); app.use("/stores", storesRoutes);
module.exports = app; module.exports = app;

View File

@ -0,0 +1,37 @@
const crypto = require("crypto");
function generateRequestId() {
if (typeof crypto.randomUUID === "function") {
return crypto.randomUUID();
}
return crypto.randomBytes(16).toString("hex");
}
function isPlainObject(value) {
return (
value !== null &&
typeof value === "object" &&
!Array.isArray(value) &&
Object.prototype.toString.call(value) === "[object Object]"
);
}
function requestIdMiddleware(req, res, next) {
const requestId = generateRequestId();
req.request_id = requestId;
res.locals.request_id = requestId;
res.setHeader("X-Request-Id", requestId);
const originalJson = res.json.bind(res);
res.json = (payload) => {
if (isPlainObject(payload) && payload.request_id === undefined) {
return originalJson({ ...payload, request_id: requestId });
}
return originalJson(payload);
};
next();
}
module.exports = requestIdMiddleware;