Skip to content

Commit 4b8da99

Browse files
committed
add node middleware
1 parent 4dce529 commit 4b8da99

File tree

3 files changed

+57
-0
lines changed

3 files changed

+57
-0
lines changed

examples/experimental/next.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const nextConfig: NextConfig = {
99
},
1010
experimental: {
1111
ppr: "incremental",
12+
nodeMiddleware: true,
1213
},
1314
};
1415

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { type NextRequest, NextResponse } from "next/server";
2+
import crypto from "node:crypto";
3+
4+
export default function middleware(request: NextRequest) {
5+
if (request.nextUrl.pathname === "/api/hello") {
6+
return NextResponse.json({
7+
name: "World",
8+
});
9+
}
10+
if (request.nextUrl.pathname === "/redirect") {
11+
return NextResponse.redirect(new URL("/", request.url));
12+
}
13+
if (request.nextUrl.pathname === "/rewrite") {
14+
return NextResponse.rewrite(new URL("/", request.url));
15+
}
16+
17+
return NextResponse.next({
18+
headers: {
19+
"x-middleware-test": "1",
20+
"x-random-node": crypto.randomUUID(),
21+
},
22+
});
23+
}
24+
25+
export const config = {
26+
runtime: "nodejs",
27+
};
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { expect, test } from "@playwright/test";
2+
3+
test("Node middleware should add headers", async ({ request }) => {
4+
const resp = await request.get("/");
5+
expect(resp.status()).toEqual(200);
6+
const headers = resp.headers();
7+
expect(headers["x-middleware-test"]).toEqual("1");
8+
expect(headers["x-random-node"]).toBeDefined();
9+
});
10+
11+
test("Node middleware should return json", async ({ request }) => {
12+
const resp = await request.get("/api/hello");
13+
expect(resp.status()).toEqual(200);
14+
const json = await resp.json();
15+
expect(json).toEqual({ name: "World" });
16+
});
17+
18+
test("Node middleware should redirect", async ({ page }) => {
19+
await page.goto("/redirect");
20+
await page.waitForURL("/");
21+
const el = page.getByText("Incremental PPR");
22+
await expect(el).toBeVisible();
23+
});
24+
25+
test("Node middleware should rewrite", async ({ page }) => {
26+
await page.goto("/rewrite");
27+
const el = page.getByText("Incremental PPR");
28+
await expect(el).toBeVisible();
29+
});

0 commit comments

Comments
 (0)