Skip to content

Commit

Permalink
Fix error on 404 page when middleware exists (vercel#46303)
Browse files Browse the repository at this point in the history
Closes vercel#44293.

## Bug

- [ ] 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)

## Feature

- [ ] Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR.
- [ ] Related issues linked using `fixes #number`
- [ ] [e2e](https://github.com/vercel/next.js/blob/canary/contributing/core/testing.md#writing-tests-for-nextjs) tests added
- [ ] Documentation added
- [ ] Telemetry added. In case of a feature if it's used or not.
- [ ] Errors have a helpful link attached, see [`contributing.md`](https://github.com/vercel/next.js/blob/canary/contributing.md)

## Documentation / Examples

- [ ] Make sure the linting passes by running `pnpm build && pnpm lint`
- [ ] The "examples guidelines" are followed from [our contributing doc](https://github.com/vercel/next.js/blob/canary/contributing/examples/adding-examples.md)
  • Loading branch information
shuding committed Feb 23, 2023
1 parent cd557c9 commit bcb2010
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 4 deletions.
8 changes: 4 additions & 4 deletions packages/next/src/shared/lib/router/router.ts
Expand Up @@ -1456,6 +1456,8 @@ export default class Router implements BaseRouter {
Router.events.emit('routeChangeStart', as, routeProps)
}

const isErrorRoute = this.pathname === '/404' || this.pathname === '/_error'

try {
let routeInfo = await this.getRouteInfo({
route,
Expand Down Expand Up @@ -1645,10 +1647,7 @@ export default class Router implements BaseRouter {
// wasn't originally present. This is also why this block is before the
// below `changeState` call which updates the browser's history (changing
// the URL).
if (
isQueryUpdating &&
(this.pathname === '/404' || this.pathname === '/_error')
) {
if (isQueryUpdating && isErrorRoute) {
routeInfo = await this.getRouteInfo({
route: this.pathname,
pathname: this.pathname,
Expand All @@ -1658,6 +1657,7 @@ export default class Router implements BaseRouter {
routeProps: { shallow: false },
locale: nextState.locale,
isPreview: nextState.isPreview,
isQueryUpdating: isQueryUpdating && !this.isFallback,
})

if ('type' in routeInfo) {
Expand Down
11 changes: 11 additions & 0 deletions test/e2e/404-page-router/index.test.ts
Expand Up @@ -118,5 +118,16 @@ describe.each(table)(
}
})
})

// It should not throw any errors when re-fetching the route info:
// https://github.com/vercel/next.js/issues/44293
it('should not throw any errors when re-fetching the route info', async () => {
const browser = await webdriver(next.url, '/?test=1')
await check(
() => browser.eval('next.router.isReady ? "yes" : "no"'),
'yes'
)
expect(await browser.elementById('query').text()).toEqual('test=1')
})
}
)

0 comments on commit bcb2010

Please sign in to comment.