diff --git a/src/base-middleware.ts b/src/base-middleware.ts index d0a24c6..7d0ceda 100644 --- a/src/base-middleware.ts +++ b/src/base-middleware.ts @@ -7,8 +7,9 @@ import {DEFAULT_REQUEST_ID_HEADER} from './constants'; export function setupBaseMiddleware(ctx: AppContext, expressApp: Express) { expressApp.use((req, res, next) => { try { - req.id = (req.headers[DEFAULT_REQUEST_ID_HEADER] || uuidv4()) as string; - res.setHeader(DEFAULT_REQUEST_ID_HEADER, req.id); + const requestId = (req.headers[DEFAULT_REQUEST_ID_HEADER] || uuidv4()) as string; + req.id = requestId; + res.setHeader(DEFAULT_REQUEST_ID_HEADER, requestId); res.setHeader('Surrogate-Control', 'no-store'); res.setHeader( @@ -25,10 +26,10 @@ export function setupBaseMiddleware(ctx: AppContext, expressApp: Express) { req.originalContext = req.ctx = ctx.create(`Express ${req.method}`, { parentSpanContext, - loggerPostfix: `[${req.id}]`, + loggerPostfix: `[${requestId}]`, spanKind: 1, // SERVER }); - req.ctx.set(REQUEST_ID_PARAM_NAME, req.id); + req.ctx.set(REQUEST_ID_PARAM_NAME, requestId); req.ctx.setTag('http.hostname', req.hostname); req.ctx.setTag('http.method', req.method); @@ -36,7 +37,7 @@ export function setupBaseMiddleware(ctx: AppContext, expressApp: Express) { req.ctx.setTag('path', ctx.utils.redactSensitiveQueryParams(req.path)); req.ctx.setTag('referer', ctx.utils.redactSensitiveQueryParams(req.get('referer'))); req.ctx.setTag('remote_ip', req.ip ?? 'unknown'); - req.ctx.setTag('request_id', req.id); + req.ctx.setTag('request_id', requestId); req.ctx.setTag('user_agent', userAgent); const traceId = req.ctx.getTraceId(); @@ -46,7 +47,7 @@ export function setupBaseMiddleware(ctx: AppContext, expressApp: Express) { } req.ctx.addLoggerExtra('req', { - id: req.id, + id: requestId, method: req.method, url: ctx.utils.redactSensitiveQueryParams(req.path), }); @@ -56,7 +57,7 @@ export function setupBaseMiddleware(ctx: AppContext, expressApp: Express) { : { traceId, req: { - id: req.id, + id: requestId, method: req.method, url: ctx.utils.redactSensitiveQueryParams(req.url), headers: ctx.utils.redactSensitiveHeaders(req.headers), diff --git a/src/router.ts b/src/router.ts index d7df48c..42d5826 100644 --- a/src/router.ts +++ b/src/router.ts @@ -1,4 +1,4 @@ -import type {AppContext} from '@gravity-ui/nodekit'; +import {type AppContext, REQUEST_ID_PARAM_NAME} from '@gravity-ui/nodekit'; import {Express, Router} from 'express'; import {cspMiddleware, getAppPresets} from './csp/middleware'; @@ -106,7 +106,7 @@ export function setupRoutes(ctx: AppContext, expressApp: Express, routes: AppRou service: 'self', action: req.routeInfo.handlerName || UNNAMED_CONTROLLER, responseStatus: res.statusCode, - requestId: req.id, + requestId: req.ctx.get(REQUEST_ID_PARAM_NAME) || '', requestTime: req.originalContext.getTime(), //We have to use req.originalContext here to get full time requestMethod: req.method, requestUrl: req.originalUrl, diff --git a/src/types.ts b/src/types.ts index 1cf7a90..126e924 100644 --- a/src/types.ts +++ b/src/types.ts @@ -17,6 +17,9 @@ declare global { // eslint-disable-next-line namespace Express { export interface Request { + /** + * @deprecated Use req.ctx.get(REQUEST_ID_PARAM_NAME) instead of req.id + */ id: string; ctx: AppContext; originalContext: AppContext; @@ -27,6 +30,9 @@ declare global { declare module 'express' { export interface Request { + /** + * @deprecated Use req.ctx.get(REQUEST_ID_PARAM_NAME) instead of req.id + */ id: string; ctx: AppContext; originalContext: AppContext;