Source

middlewares/requestId.js

import { globalLogger } from "@config/logger";
import { asyncLocalStorage } from "@utils/asyncLocalStorage";
import { randomUUID } from "node:crypto";
/**
 * Middleware to add request ID tracking to each request
 * @param {Request} req - Express request object
 * @param {Response} res - Express response object
 * @param {NextFunction} next - Express next function
 */
export function requestIdMiddleware(req, res, next) {
    const requestId = req.headers["x-request-id"] || randomUUID();
    res.setHeader("x-request-id", requestId);
    const requestLogger = globalLogger.child({ requestId });
    req.logger = requestLogger;
    asyncLocalStorage.run({ logger: requestLogger, requestId }, () => {
        next();
    });
}