diff --git a/packages/next/server/next-server.ts b/packages/next/server/next-server.ts index 7084d982f18ad30..27316dd1fd3e035 100644 --- a/packages/next/server/next-server.ts +++ b/packages/next/server/next-server.ts @@ -2049,9 +2049,7 @@ export default class NextNodeServer extends BaseServer { // For middleware to "fetch" we must always provide an absolute URL const isDataReq = !!params.query.__nextDataReq - const query = urlQueryToSearchParams( - Object.assign({}, getRequestMeta(params.req, '__NEXT_INIT_QUERY') || {}) - ).toString() + const query = urlQueryToSearchParams(params.query).toString() const locale = params.query.__nextLocale // Use original pathname (without `/page`) instead of appPath for url let normalizedPathname = params.page diff --git a/test/e2e/middleware-general/app/middleware.js b/test/e2e/middleware-general/app/middleware.js index 83ba6722ff61e8c..5a5f2f903d01931 100644 --- a/test/e2e/middleware-general/app/middleware.js +++ b/test/e2e/middleware-general/app/middleware.js @@ -47,6 +47,12 @@ export async function middleware(request) { return NextResponse.next() } + if (url.pathname === '/api/edge-search-params') { + const newUrl = url.clone() + newUrl.searchParams.set('foo', 'bar') + return NextResponse.rewrite(newUrl) + } + if (url.pathname === '/') { url.pathname = '/ssg/first' return NextResponse.rewrite(url) diff --git a/test/e2e/middleware-general/app/pages/api/edge-search-params.js b/test/e2e/middleware-general/app/pages/api/edge-search-params.js new file mode 100644 index 000000000000000..a67cecdf18ec0e1 --- /dev/null +++ b/test/e2e/middleware-general/app/pages/api/edge-search-params.js @@ -0,0 +1,10 @@ +import { NextResponse } from 'next/server' + +export const config = { runtime: 'experimental-edge' } + +/** + * @param {import('next/server').NextRequest} + */ +export default (req) => { + return NextResponse.json(Object.fromEntries(req.nextUrl.searchParams)) +} diff --git a/test/e2e/middleware-general/test/index.test.ts b/test/e2e/middleware-general/test/index.test.ts index a99d002b1201001..e5e19c6bc1e95b1 100644 --- a/test/e2e/middleware-general/test/index.test.ts +++ b/test/e2e/middleware-general/test/index.test.ts @@ -116,7 +116,10 @@ describe('Middleware Runtime', () => { 'ANOTHER_MIDDLEWARE_TEST', 'STRING_ENV_VAR', ], - files: ['server/edge-runtime-webpack.js', 'server/middleware.js'], + files: expect.arrayContaining([ + 'server/edge-runtime-webpack.js', + 'server/middleware.js', + ]), name: 'middleware', page: '/', matchers: [{ regexp: '^/.*$' }], @@ -157,6 +160,17 @@ describe('Middleware Runtime', () => { }) } + it('passes search params with rewrites', async () => { + const response = await fetchViaHTTP(next.url, `/api/edge-search-params`, { + a: 'b', + }) + await expect(response.json()).resolves.toMatchObject({ + a: 'b', + // included from middleware + foo: 'bar', + }) + }) + it('should have init header for NextResponse.redirect', async () => { const res = await fetchViaHTTP( next.url,