34 lines
980 B
JavaScript
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;
|