19 lines
713 B
TypeScript
19 lines
713 B
TypeScript
import crypto from "crypto";
|
|
import type { Request, Response, NextFunction } from "express";
|
|
|
|
const HEADER = "X-Request-Id";
|
|
|
|
/**
|
|
* Assigns a unique request ID to every incoming request.
|
|
* If the client (or a reverse proxy) already sent X-Request-Id, reuse it;
|
|
* otherwise generate a short random hex string.
|
|
* The ID is stored on `res.locals.requestId` for downstream middleware/routes
|
|
* and echoed back via the X-Request-Id response header.
|
|
*/
|
|
export function requestIdMiddleware(req: Request, res: Response, next: NextFunction): void {
|
|
const id = (req.headers[HEADER.toLowerCase()] as string | undefined) ?? crypto.randomUUID();
|
|
res.locals["requestId"] = id;
|
|
res.setHeader(HEADER, id);
|
|
next();
|
|
}
|