Overview
Generate unique request IDs for distributed tracing and logging correlation.
Features
- UUID generation
- Correlation ID support
- Response headers
- AWS ALB support
Installation
npx hanma add request-id-middleware --framework nest
Dependencies
uuid
Code
import { Injectable, NestMiddleware } from "@nestjs/common";
import { Request, Response, NextFunction } from "express";
import { v4 as uuidv4 } from "uuid";
declare global {
namespace Express {
interface Request {
id: string;
correlationId?: string;
startTime: number;
}
}
}
@Injectable()
export class RequestIdMiddleware implements NestMiddleware {
use(req: Request, res: Response, next: NextFunction) {
// Use existing request ID or generate new one
const requestId =
(req.headers["x-request-id"] as string) ||
(req.headers["x-amzn-trace-id"] as string) || // AWS ALB
uuidv4();
// Correlation ID for tracing across services
const correlationId =
(req.headers["x-correlation-id"] as string) ||
requestId;
// Attach to request object
req.id = requestId;
req.correlationId = correlationId;
req.startTime = Date.now();
// Set response headers
res.setHeader("X-Request-Id", requestId);
res.setHeader("X-Correlation-Id", correlationId);
next();
}
}
// Functional middleware for simpler use
export function requestIdMiddleware(
req: Request,
res: Response,
next: NextFunction
) {
const requestId =
(req.headers["x-request-id"] as string) ||
uuidv4();
const correlationId =
(req.headers["x-correlation-id"] as string) ||
requestId;
req.id = requestId;
req.correlationId = correlationId;
req.startTime = Date.now();
res.setHeader("X-Request-Id", requestId);
res.setHeader("X-Correlation-Id", correlationId);
next();
}
// Usage in AppModule:
/*
import { MiddlewareConsumer, Module, NestModule } from "@nestjs/common";
import { RequestIdMiddleware } from "./middleware/request-id.middleware";
@Module({})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer.apply(RequestIdMiddleware).forRoutes("*");
}
}
*/
Usage
// In AppModule
configure(consumer: MiddlewareConsumer) {
consumer.apply(RequestIdMiddleware).forRoutes('*');
}
Dependencies
uuid
Frequently Asked Questions
How do I install Request ID Middleware?
Run the following command:
npx hanma add request-id-middleware --framework nestWhat dependencies are required?
This snippet requires: uuid. Make sure to install them before using the snippet.
How do I use this snippet?
Copy the code and paste it into your project. The snippet will be saved to
src/middleware/request-id.middleware.ts.Can I customize this snippet?
Yes! All snippets are copy-paste code that you own. Feel free to modify them to fit your needs.
Does this work with other frameworks?
This snippet is designed for the specific framework. Check the other framework pages for equivalent implementations.