23 lines
761 B
TypeScript
23 lines
761 B
TypeScript
import {randomUUID} from 'node:crypto';
|
|
import type {NextFunction, Request, Response} from 'express';
|
|
|
|
/**
|
|
* Middleware to add a unique request ID to each request
|
|
* The request ID is used for error tracking and debugging
|
|
*/
|
|
export const requestIdMiddleware = (req: Request, res: Response, next: NextFunction) => {
|
|
// Check if request ID already exists (e.g., from load balancer)
|
|
const existingRequestId = req.headers['x-request-id'] as string | undefined;
|
|
|
|
// Generate new ID if not provided
|
|
const requestId = existingRequestId || randomUUID();
|
|
|
|
// Store in request object for use in handlers
|
|
res.locals.requestId = requestId;
|
|
|
|
// Send back in response headers for client-side tracking
|
|
res.setHeader('X-Request-ID', requestId);
|
|
|
|
next();
|
|
};
|