api-v1/middleware/requestContext.js

34 lines
980 B
JavaScript

// middleware/requestContext.js
/**
* Request Context Middleware
*
* Extracts and attaches request context information (IP, user agent, etc.)
* This should be the FIRST middleware in the chain
*/
function requestContext(req, res, next) {
// Extract client IP (considering proxies)
req.clientIp = req.ip ||
req.headers['x-forwarded-for']?.split(',')[0]?.trim() ||
req.headers['x-real-ip'] ||
req.connection?.remoteAddress ||
'unknown';
// Extract user agent
req.userAgent = req.headers['user-agent'] || 'unknown';
// Extract request ID for tracing (if not already set)
req.requestId = req.headers['x-request-id'] ||
`${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
// Set request ID in response header
res.setHeader('X-Request-Id', req.requestId);
// Attach timestamp
req.requestTimestamp = new Date();
next();
}
export default requestContext;