From 9dd24a593187dd4e177e542abd9ae3a7dd9474d3 Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Sat, 4 Mar 2023 18:32:53 -0800 Subject: [PATCH] Fix middleware 404 prefetch case (#46782) Ensures we properly generate the 404 page when a path is being prefetched with middleware configured. ## Bug - [x] Related issues linked using `fixes #number` - [x] Integration tests added - [ ] Errors have a helpful link attached, see [`contributing.md`](https://github.com/vercel/next.js/blob/canary/contributing.md) Closes: https://github.com/vercel/next.js/issues/38239#issuecomment-1454928413 --- packages/next/src/server/base-server.ts | 6 +++++- test/e2e/middleware-general/test/index.test.ts | 6 ++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/next/src/server/base-server.ts b/packages/next/src/server/base-server.ts index ec0ef2caad..78b442efc7 100644 --- a/packages/next/src/server/base-server.ts +++ b/packages/next/src/server/base-server.ts @@ -1196,7 +1196,11 @@ export default abstract class Server { // when we are handling a middleware prefetch and it doesn't // resolve to a static data route we bail early to avoid // unexpected SSR invocations - if (!isSSG && req.headers['x-middleware-prefetch']) { + if ( + !isSSG && + req.headers['x-middleware-prefetch'] && + !(is404Page || pathname === '/_error') + ) { res.setHeader('x-middleware-skip', '1') res.body('{}').send() return null diff --git a/test/e2e/middleware-general/test/index.test.ts b/test/e2e/middleware-general/test/index.test.ts index ff89b7ac30..8f1fb2da35 100644 --- a/test/e2e/middleware-general/test/index.test.ts +++ b/test/e2e/middleware-general/test/index.test.ts @@ -80,6 +80,12 @@ describe('Middleware Runtime', () => { /This page could not be found/ ) expect(await browser.eval('window.beforeNav')).toBe(1) + + await browser.refresh() + await check( + () => browser.eval('document.documentElement.innerHTML'), + /This page could not be found/ + ) }) it('should be able to rewrite on _next/static/chunks/pages/ 404', async () => {