Files
lehuo/apps/api/src/common/request-id.middleware.ts
T
2026-08-12 14:35:12 +08:00

18 lines
656 B
TypeScript

import { Injectable, type NestMiddleware } from '@nestjs/common';
import { randomUUID } from 'node:crypto';
import type { NextFunction, Response } from 'express';
import type { RequestContext } from './request-context';
const REQUEST_ID_PATTERN = /^[a-zA-Z0-9_-]{8,64}$/;
@Injectable()
export class RequestIdMiddleware implements NestMiddleware {
use(request: RequestContext, response: Response, next: NextFunction): void {
const supplied = request.header('x-request-id');
request.requestId = supplied && REQUEST_ID_PATTERN.test(supplied) ? supplied : randomUUID();
response.setHeader('x-request-id', request.requestId);
next();
}
}