diff --git a/packages/tracing-internal/src/node/integrations/express.ts b/packages/tracing-internal/src/node/integrations/express.ts index f7ff20fa9986..eb1c22cf41d1 100644 --- a/packages/tracing-internal/src/node/integrations/express.ts +++ b/packages/tracing-internal/src/node/integrations/express.ts @@ -543,7 +543,9 @@ export function preventDuplicateSegments( reconstructedRoute?: string, layerPath?: string, ): string | undefined { - const originalUrlSplit = originalUrl?.split('/').filter(v => !!v); + // filter query params + const normalizeURL = stripUrlQueryAndFragment(originalUrl || ''); + const originalUrlSplit = normalizeURL?.split('/').filter(v => !!v); let tempCounter = 0; const currentOffset = reconstructedRoute?.split('/').filter(v => !!v).length || 0; const result = layerPath diff --git a/packages/tracing-internal/test/node/express.test.ts b/packages/tracing-internal/test/node/express.test.ts index 4b8d31fb2cdc..1631971d9863 100644 --- a/packages/tracing-internal/test/node/express.test.ts +++ b/packages/tracing-internal/test/node/express.test.ts @@ -35,6 +35,22 @@ describe('unit Test for preventDuplicateSegments', () => { const result1 = preventDuplicateSegments(originalUrl, reconstructedRoute, layerPath); expect(result1).toBe('1234'); }); + + it('should prevent duplicate segment v1 originalUrl with query param without trailing slash', () => { + const originalUrl = '/api/v1/1234?queryParam=123'; + const reconstructedRoute = '/api/v1'; + const layerPath = '/v1/1234'; + const result1 = preventDuplicateSegments(originalUrl, reconstructedRoute, layerPath); + expect(result1).toBe('1234'); + }); + + it('should prevent duplicate segment v1 originalUrl with query param with trailing slash', () => { + const originalUrl = '/api/v1/1234/?queryParam=123'; + const reconstructedRoute = '/api/v1'; + const layerPath = '/v1/1234'; + const result1 = preventDuplicateSegments(originalUrl, reconstructedRoute, layerPath); + expect(result1).toBe('1234'); + }); }); describe('preventDuplicateSegments should handle empty input gracefully', () => { it('Empty input values', () => {