diff --git a/packages/next/server/app-render.tsx b/packages/next/server/app-render.tsx index 5a2e04a89e67..ba1a48cd0409 100644 --- a/packages/next/server/app-render.tsx +++ b/packages/next/server/app-render.tsx @@ -421,8 +421,9 @@ export async function renderToHTML( } const key = segmentParam.param + const value = pathParams[key] - if (!pathParams[key] && !query[key]) { + if (!value) { if (segmentParam.type === 'optional-catchall') { return { param: key, @@ -433,9 +434,6 @@ export async function renderToHTML( return null } - // TODO: this should only read from `pathParams`. There's an inconsistency where `query` holds params currently which has to be fixed. - const value = pathParams[key] ?? query[key] - return { param: key, value: value, diff --git a/packages/next/server/base-server.ts b/packages/next/server/base-server.ts index a096b4380f22..e552fffdb60a 100644 --- a/packages/next/server/base-server.ts +++ b/packages/next/server/base-server.ts @@ -221,7 +221,8 @@ export default abstract class Server { protected abstract findPageComponents( pathname: string, query?: NextParsedUrlQuery, - params?: Params + params?: Params, + isAppDir?: boolean ): Promise protected abstract getPagePath(pathname: string, locales?: string[]): string protected abstract getFontManifest(): FontManifest | undefined @@ -1795,10 +1796,12 @@ export default abstract class Server { if (typeof appPath === 'string') { page = appPath } + const result = await this.findPageComponents( page, query, - ctx.renderOpts.params + ctx.renderOpts.params, + typeof appPath === 'string' ) if (result) { try { diff --git a/packages/next/server/dev/next-dev-server.ts b/packages/next/server/dev/next-dev-server.ts index 09b63dc1c8fa..9aa929b1285e 100644 --- a/packages/next/server/dev/next-dev-server.ts +++ b/packages/next/server/dev/next-dev-server.ts @@ -1105,7 +1105,8 @@ export default class DevServer extends Server { protected async findPageComponents( pathname: string, query: ParsedUrlQuery = {}, - params: Params | null = null + params: Params | null = null, + isAppDir: boolean = false ): Promise { await this.devReady const compilationErr = await this.getCompilationError(pathname) @@ -1124,7 +1125,7 @@ export default class DevServer extends Server { this.serverComponentManifest = super.getServerComponentManifest() } - return super.findPageComponents(pathname, query, params) + return super.findPageComponents(pathname, query, params, isAppDir) } catch (err) { if ((err as any).code !== 'ENOENT') { throw err diff --git a/packages/next/server/next-server.ts b/packages/next/server/next-server.ts index bd23e23078d8..4fcef3be4d1f 100644 --- a/packages/next/server/next-server.ts +++ b/packages/next/server/next-server.ts @@ -683,7 +683,8 @@ export default class NextNodeServer extends BaseServer { protected async findPageComponents( pathname: string, query: NextParsedUrlQuery = {}, - params: Params | null = null + params: Params | null = null, + isAppDir: boolean = false ): Promise { let paths = [ // try serving a static AMP version first @@ -732,7 +733,8 @@ export default class NextNodeServer extends BaseServer { __flight__: query.__flight__, } as NextParsedUrlQuery) : query), - ...(params || {}), + // For appDir params is excluded. + ...((isAppDir ? {} : params) || {}), }, } } catch (err) {