From 0fd09a80e06f383d5481ce4269b216dc7a0f7de3 Mon Sep 17 00:00:00 2001 From: Christopher Dignam Date: Thu, 4 May 2023 23:02:45 -0400 Subject: [PATCH 1/2] report errorMiddleware errors as unhandled I found it confusing that unhandled errors caught by the express.js middleware were being reported as handled This change updates the behavior to match Sentry-Python's Django integration: https://github.com/getsentry/sentry-python/blob/81afcea403c0ac148d631164de29ed80d6a64840/sentry_sdk/integrations/asgi.py#L58 --- packages/node/src/handlers.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/node/src/handlers.ts b/packages/node/src/handlers.ts index 95a4cfe65e38..c23130f4b0cd 100644 --- a/packages/node/src/handlers.ts +++ b/packages/node/src/handlers.ts @@ -10,6 +10,7 @@ import { import type { Span } from '@sentry/types'; import type { AddRequestDataToEventOptions } from '@sentry/utils'; import { + addExceptionMechanism, addRequestDataToTransaction, baggageHeaderToDynamicSamplingContext, dropUndefinedKeys, @@ -304,6 +305,11 @@ export function errorHandler(options?: { } } + _scope.addEventProcessor(event => { + addExceptionMechanism(event, { type: 'middleware', handled: false }); + return event; + }); + const eventId = captureException(error); // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access (res as any).sentry = eventId; From 2c184c9d80da63bc2f2ddaef9d666db11ae78788 Mon Sep 17 00:00:00 2001 From: Christopher Dignam Date: Fri, 5 May 2023 21:07:12 -0400 Subject: [PATCH 2/2] fix test --- .../suites/express/handle-error/test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/node-integration-tests/suites/express/handle-error/test.ts b/packages/node-integration-tests/suites/express/handle-error/test.ts index e8be4081203c..d9eb59a72785 100644 --- a/packages/node-integration-tests/suites/express/handle-error/test.ts +++ b/packages/node-integration-tests/suites/express/handle-error/test.ts @@ -11,8 +11,8 @@ test('should capture and send Express controller error.', async () => { values: [ { mechanism: { - type: 'generic', - handled: true, + type: 'middleware', + handled: false, }, type: 'Error', value: 'test_error',