Skip to content

[BUG] API Routes don't work with pages router #380

@tareqlol

Description

@tareqlol

Describe the bug

Hey team 👋🏼,

Redirects/rewrites from the middleware.ts file to Next.js's pages router throws an error.

 ⨯ Error: Dynamic require of "/.next/server/pages/api/login.js" is not supported

      at null.<anonymous>
  (file:///Users/REDACTED/Projects/opennextjs-cloudflare/examples/create-next-app/.wrangler/tmp/dev-FpJJge/worker.js:22:9)
      at Object.load
  (file:///Users/REDACTED/Projects/opennextjs-cloudflare/examples/create-next-app/.open-next/server-functions/default/examples/create-next-app/handler.mjs:110733:32)
      at RouteModuleLoader.load
  (file:///Users/REDACTED/Projects/opennextjs-cloudflare/examples/create-next-app/.open-next/server-functions/default/examples/create-next-app/handler.mjs:110757:38)
      at Object.runApi
  (file:///Users/REDACTED/Projects/opennextjs-cloudflare/examples/create-next-app/.open-next/server-functions/default/examples/create-next-app/handler.mjs:114126:68)
      at Object.handleApiRequest
  (file:///Users/REDACTED/Projects/opennextjs-cloudflare/examples/create-next-app/.open-next/server-functions/default/examples/create-next-app/handler.mjs:114292:21)
      at Object.handleCatchallRenderRequest
  (file:///Users/REDACTED/Projects/opennextjs-cloudflare/examples/create-next-app/.open-next/server-functions/default/examples/create-next-app/handler.mjs:113812:42)
      at async Object.runImpl
  (file:///Users/REDACTED/Projects/opennextjs-cloudflare/examples/create-next-app/.open-next/server-functions/default/examples/create-next-app/handler.mjs:22338:9)
      at async Object.handleRequestImpl
  (file:///Users/REDACTED/Projects/opennextjs-cloudflare/examples/create-next-app/.open-next/server-functions/default/examples/create-next-app/handler.mjs:22271:18)
      at async processRequest
  (file:///Users/REDACTED/Projects/opennextjs-cloudflare/examples/create-next-app/.open-next/server-functions/default/examples/create-next-app/handler.mjs:116257:5)
      at null.<anonymous> (async
  file:///Users/REDACTED/Projects/opennextjs-cloudflare/examples/create-next-app/.wrangler/tmp/dev-FpJJge/worker.js:132420:5)


[wrangler:inf] GET / 500 Internal Server Error (76ms)

I have tested this with the new App router by migrating the API route to a Route handler and it works as expected.

Steps to reproduce

  1. Using the create-next-app example.
  2. Create a middleware.ts on the root of the ./src.
  3. Add the following:
import { NextRequest, NextResponse } from 'next/server';

export async function middleware(req: NextRequest) {
  const url = new URL('/api/login', req.url);
  return NextResponse.rewrite(url);
}
  1. Create an API route on the pages router ./src/pages/api/login.ts.
  2. Add the following:
import { NextApiRequest, NextApiResponse } from 'next';

export default function login(_: NextApiRequest, res: NextApiResponse) {
  res.send('Hello, world!');
}
  1. Run next dev to verify that the middleware redirects correctly.
  2. Run pnpm preview.
  3. Navigate to the local env, the error thrown.
Error: Dynamic require of "/.next/server/pages/api/login.js" is not supported

Expected behavior

The adapter should support both App Router, and Pages router

@opennextjs/cloudflare version

0.5.1

Wrangler version

3.109.1

next info output

Operating System:
  Platform: darwin
  Arch: arm64
  Version: Darwin Kernel Version 24.2.0: Fri Dec  6 19:04:03 PST 2024; root:xnu-11215.61.5~2/RELEASE_ARM64_T8132
  Available memory (MB): 32768
  Available CPU cores: 10
Binaries:
  Node: 20.9.0
  npm: 10.9.1
  Yarn: 1.22.19
  pnpm: 9.14.3
Relevant Packages:
  next: 14.2.24 // An outdated version detected (latest is 15.1.7), upgrade is highly recommended!
  eslint-config-next: N/A
  react: 18.3.1
  react-dom: 18.3.1
  typescript: N/A
Next.js Config:
  output: N/A
 ⚠ An outdated version detected (latest is 15.1.7), upgrade is highly recommended!
   Please try the latest canary version (`npm install next@canary`) to confirm the issue still exists before creating a new issue.
   Read more - https://nextjs.org/docs/messages/opening-an-issue

Additional context

No response

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions