Files
next.js/errors/next-prerender-sync-request.mdx
T
Wyatt JohnsonandGitHub 8abbb3dc2e refactor: rename experimental.dynamicIO to experimental.cacheComponents (#81562)
## What?

Rename `experimental.dynamicIO` to `experimental.cacheComponents` across
the Next.js codebase.

## Why?

We're going to be merging the functionality of the `ppr`, `dynamicIO`
and `useCache` experimental flags into the singular `cacheComponents`
flag to reduce complexity of the codebase and simplify adoption for
users wanting to experiment with experimental features.

## How?

- Renamed the configuration option from `experimental.dynamicIO` to
`experimental.cacheComponents`
- Added deprecation handling with automatic migration for the old option
name
- Updated all documentation, tests, and internal references
- Updated Rust code in SWC transforms and Turbopack
- Maintained backward compatibility with deprecation warnings

NAR-158
2025-07-17 19:30:28 -06:00

42 lines
1.6 KiB
Plaintext

---
title: Cannot access Request information synchronously in route.js without awaiting connection first
---
## Why This Error Occurred
When `cacheComponents` is enabled Next.js treats most access to Request information as explicitly dynamic. However routes have a Request object and you can read values like the current pathname from that object synchronously. If you need to access Request information in a route handler you should first call `await connection()` to inform Next.js that everything after this point is explicitly dynamic.
This is only needed in `GET` handlers because `GET` is the only handler Next.js will attempt to prerender.
## Possible Ways to Fix It
Look for access of the Request object in your route.js and add `await connection()` before you access any properties of the Request.
Before:
```jsx filename="app/.../route.js"
export default function GET(request) {
const requestHeaders = request.headers
return ...
}
```
After:
```jsx filename="app/.../route.js"
import { connection } from 'next/server'
export default async function GET(request) {
await connection()
const requestHeaders = request.headers
return ...
}
```
It is unexpected that you would run the codemod and not successfully convert all instances of `params` and `searchParams` to async or have a marker string to help you locate unconverted cases. If you do find yourself in this situation please report this to [Next.js on Github](https://github.com/vercel/next.js/issues).
## Useful Links
- [`connection` function](/docs/app/api-reference/functions/connection)
- [`route.js` file convention](/docs/app/api-reference/file-conventions/route)