diff --git a/packages/next/server/body-streams.ts b/packages/next/server/body-streams.ts index c31a037032ae..7218529a660a 100644 --- a/packages/next/server/body-streams.ts +++ b/packages/next/server/body-streams.ts @@ -56,9 +56,13 @@ export function getClonableBody( ): ClonableBody { let buffered: Readable | null = null - const endPromise = new Promise((resolve, reject) => { - readable.on('end', resolve) - readable.on('error', reject) + const endPromise = new Promise( + (resolve, reject) => { + readable.on('end', resolve) + readable.on('error', reject) + } + ).catch((error) => { + return { error } }) return { @@ -69,7 +73,11 @@ export function getClonableBody( */ async finalize(): Promise { if (buffered) { - await endPromise + const res = await endPromise + + if (res && typeof res === 'object' && res.error) { + throw res.error + } replaceRequestBody(readable, buffered) buffered = readable } diff --git a/test/e2e/middleware-rewrites/test/index.test.ts b/test/e2e/middleware-rewrites/test/index.test.ts index b9d61e50670d..2c84a9b8d978 100644 --- a/test/e2e/middleware-rewrites/test/index.test.ts +++ b/test/e2e/middleware-rewrites/test/index.test.ts @@ -680,6 +680,11 @@ describe('Middleware Rewrite', () => { logs.every((log) => log.source === 'log' || log.source === 'info') ).toEqual(true) }) + + it('should not have unexpected errors', async () => { + expect(next.cliOutput).not.toContain('unhandledRejection') + expect(next.cliOutput).not.toContain('ECONNRESET') + }) } function getCookieFromResponse(res, cookieName) {