Skip to content

Commit

Permalink
Feature/rewrite with query string (#281)
Browse files Browse the repository at this point in the history
* feat: add query string parameter to rewrite-destination page
  • Loading branch information
pbaire authored Oct 24, 2023
1 parent 24c5166 commit 91d3387
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 5 deletions.
13 changes: 11 additions & 2 deletions examples/app-pages-router/app/rewrite-destination/page.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
export default function RewriteDestination() {
return <div>Rewritten Destination</div>;
export default function RewriteDestination({
searchParams,
}: {
searchParams: { a: string };
}) {
return (
<div>
<div>Rewritten Destination</div>
<div>a: {searchParams.a}</div>
</div>
);
}
1 change: 1 addition & 0 deletions examples/app-pages-router/middleware.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ export function middleware(request: NextRequest) {
});
} else if (path === "/rewrite") {
const u = new URL("/rewrite-destination", `${protocol}://${host}`);
u.searchParams.set("a", "b");
return NextResponse.rewrite(u);
} else if (path === "/api/middleware") {

Check warning on line 17 in examples/app-pages-router/middleware.ts

View workflow job for this annotation

GitHub Actions / Release

Add the missing "else" clause
return new NextResponse(JSON.stringify({ hello: "middleware" }), {
Expand Down
11 changes: 9 additions & 2 deletions packages/open-next/src/adapters/routing/middleware.ts
Original file line number Diff line number Diff line change
Expand Up @@ -139,8 +139,15 @@ export async function handleMiddleware(
// NOTE: the header was added to `req` from above
const rewriteUrl = responseHeaders.get("x-middleware-rewrite");
let rewritten = false;
let middlewareQueryString = internalEvent.query;
if (rewriteUrl) {
req.url = new URL(rewriteUrl).pathname;
const rewriteUrlObject = new URL(rewriteUrl);
req.url = rewriteUrlObject.pathname;
//reset qs
middlewareQueryString = {};
rewriteUrlObject.searchParams.forEach((v: string, k: string) => {
middlewareQueryString[k] = v;
});
rewritten = true;
}

Expand All @@ -164,7 +171,7 @@ export async function handleMiddleware(
headers: { ...internalEvent.headers, ...reqHeaders },
body: internalEvent.body,
method: internalEvent.method,
query: internalEvent.query,
query: middlewareQueryString,
cookies: internalEvent.cookies,
remoteAddress: internalEvent.remoteAddress,
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,13 @@ test("Middleware Rewrite", async ({ page }) => {
await page.waitForURL(`/rewrite`);
let el = page.getByText("Rewritten Destination", { exact: true });
await expect(el).toBeVisible();

el = page.getByText("a: b", { exact: true });
await expect(el).toBeVisible();
// Loading page should also rewrite
await page.goto(`/rewrite`);
await page.waitForURL(`/rewrite`);
el = page.getByText("Rewritten Destination", { exact: true });
await expect(el).toBeVisible();
el = page.getByText("a: b", { exact: true });
await expect(el).toBeVisible();
});

1 comment on commit 91d3387

@vercel
Copy link

@vercel vercel bot commented on 91d3387 Oct 24, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Successfully deployed to the following URLs:

open-next – ./

open-next-git-main-sst-dev.vercel.app
open-next.vercel.app
open-next-sst-dev.vercel.app

Please sign in to comment.