diff --git a/backend/src/middleware/error.middleware.ts b/backend/src/middleware/error.middleware.ts index 252cdfb..af90505 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 1d07d72..a7f497f 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(); + }); });