Navigation

Node.js

How to Add Request IDs to Every Request in Express.js

Add unique request IDs to Express.js for tracing, debugging, and correlating logs in Node.js 2025

Table Of Contents

Quick Fix: UUID Request ID Middleware

const express = require('express');
const { v4: uuidv4 } = require('uuid');

// Create request ID middleware
const requestIdMiddleware = (req, res, next) => {
  // Check if client sent X-Request-Id header
  req.id = req.headers['x-request-id'] || uuidv4();
  
  // Add to response headers for client correlation
  res.setHeader('X-Request-Id', req.id);
  
  next();
};

const app = express();
app.use(requestIdMiddleware);

// Access request ID in any route
app.get('/api/users', (req, res) => {
  console.log(`[${req.id}] Processing user request`);
  res.json({ requestId: req.id, users: [] });
});

Express Built-in Solution: Using express-request-id

const express = require('express');
const requestId = require('express-request-id');

const app = express();

// Auto-generate request IDs
app.use(requestId({
  generator: () => require('crypto').randomUUID(),
  headerName: 'X-Request-Id'
}));

// Integrate with logging (Winston example)
const winston = require('winston');
const logger = winston.createLogger({
  format: winston.format.combine(
    winston.format.printf(({ level, message, ...meta }) => {
      const requestId = meta.requestId || 'no-request-id';
      return `[${requestId}] ${level}: ${message}`;
    })
  ),
  transports: [new winston.transports.Console()]
});

// Log with request ID
app.use((req, res, next) => {
  req.log = (message) => logger.info(message, { requestId: req.id });
  next();
});

app.get('/api/data', (req, res) => {
  req.log('Fetching data'); // Logs: [uuid-here] info: Fetching data
  res.json({ id: req.id });
});

Request IDs solve "correlating logs across microservices" issues and help debug "which request caused this error" problems. Express v4+ compatible, works with PM2 cluster mode. Alternative packages: cls-hooked for async context propagation, pino-http includes request IDs automatically.

How to Handle Async Errors in Express Routes How to Add Custom Headers to All Express Responses with Middleware How to Implement Basic Authentication Middleware

Share this article

Add Comment

No comments yet. Be the first to comment!

More from Node.js