From 16ab90121f7196ae836b537cf2d5016819bbb921 Mon Sep 17 00:00:00 2001 From: charlesedeh021-cell <294822331+charlesedeh021-cell@users.noreply.github.com> Date: Mon, 29 Jun 2026 20:57:05 +0100 Subject: [PATCH] fix: delegate after streamed error responses --- backend/src/middleware/error.middleware.ts | 4 ++++ backend/tests/error.middleware.test.ts | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/backend/src/middleware/error.middleware.ts b/backend/src/middleware/error.middleware.ts index 252cdfb0..af90505b 100644 --- a/backend/src/middleware/error.middleware.ts +++ b/backend/src/middleware/error.middleware.ts @@ -14,6 +14,10 @@ export const errorHandler = ( ) => { logger.error('Unhandled error:', err); + if (res.headersSent) { + return next(err); + } + // Handle Zod Validation Errors if (err instanceof ZodError) { return res.status(400).json({ diff --git a/backend/tests/error.middleware.test.ts b/backend/tests/error.middleware.test.ts index 1d07d72c..a7f497fa 100644 --- a/backend/tests/error.middleware.test.ts +++ b/backend/tests/error.middleware.test.ts @@ -44,4 +44,15 @@ describe('Error Middleware', () => { errorHandler(error, req as Request, res as Response, next); expect(res.status).toHaveBeenCalledWith(500); }); + + it('should delegate to next when headers were already sent', () => { + const error = new Error('Stream failed after headers'); + res.headersSent = true; + + errorHandler(error, req as Request, res as Response, next); + + expect(next).toHaveBeenCalledWith(error); + expect(res.status).not.toHaveBeenCalled(); + expect(res.json).not.toHaveBeenCalled(); + }); });