-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Description
Is there an existing issue for this?
- I have checked for existing issues https://github.com/getsentry/sentry-javascript/issues
- I have reviewed the documentation https://docs.sentry.io/
- I am using the latest SDK release https://github.com/getsentry/sentry-javascript/releases
How do you use Sentry?
Sentry Saas (sentry.io)
Which SDK are you using?
@sentry/node
SDK Version
8.0.0-beta.6
Framework Version
No response
Link to Sentry event
No response
SDK Setup
No response
Steps to Reproduce
In this code for the setupNestErrorHandler
, an interceptor is created. It wants to get an HTTP request from the execution context and when the request has a route property it uses that to set the transaction name:
sentry-javascript/packages/node/src/integrations/tracing/nest.ts
Lines 52 to 66 in 3355a05
export function setupNestErrorHandler(app: MinimalNestJsApp, baseFilter: NestJsErrorFilter): void { | |
app.useGlobalInterceptors({ | |
intercept(context, next) { | |
if (getIsolationScope() === getDefaultIsolationScope()) { | |
logger.warn('Isolation scope is still the default isolation scope, skipping setting transactionName.'); | |
return next.handle(); | |
} | |
const req = context.switchToHttp().getRequest(); | |
if (req.route) { | |
getIsolationScope().setTransactionName(`${req.method?.toUpperCase() || 'GET'} ${req.route.path}`); | |
} | |
return next.handle(); | |
}, | |
}); |
However, this assumes the NestJS app is only operating as an HTTP server. NestJS execution contexts come in different varieties when the app is being used for microservices or as a GraphQL server. These contexts may not have a request, and this is not respected by the handler.
Expected Result
The interceptor should check if it is in an HTTP execution context before inspecting the request or route.
if (context.getType() === 'http') {
const req = context.switchToHttp().getRequest();
// etc
}
Actual Result
In non-HTTP contexts, an error occurs in the interceptor:
TypeError: Cannot read properties of undefined (reading 'route')
See #5578 (comment)
Metadata
Metadata
Assignees
Labels
Projects
Status