/** * RequestId middleware. * @file 请求链路 ID 中间件 * @module middleware/request-id.middleware * @author zhxiao1124 */ import { NextFunction, Request, Response } from "express"; import { validate as validateUuid, version as uuidVersion, v4 as uuidv4 } from "uuid"; export function RequestIdMiddleware(request: Request & { requestId?: string; startTime?: bigint }, response: Response, next: NextFunction) { const incomingRequestId = request.get("x-request-id"); const requestId = incomingRequestId && validateUuid(incomingRequestId) && uuidVersion(incomingRequestId) === 4 ? incomingRequestId : uuidv4(); request.requestId = requestId; request.startTime = process.hrtime.bigint(); response.setHeader("X-Request-Id", requestId); next(); }