1
1
import { NextResponse } from 'next/server'
2
- import { NextFetchEvent , NextRequest } from 'next/server'
2
+ import type { NextRequest } from 'next/server'
3
3
4
- export function middleware ( request : NextRequest , ev : NextFetchEvent ) {
4
+ import { MiddlewareRequest } from '@netlify/plugin-nextjs/middleware'
5
+
6
+ export async function middleware ( req : NextRequest ) {
5
7
let response
6
8
const {
7
9
nextUrl : { pathname } ,
8
- } = request
10
+ } = req
11
+
12
+ const request = new MiddlewareRequest ( req )
13
+
14
+ if ( pathname . startsWith ( '/static' ) ) {
15
+ // Unlike NextResponse.next(), this actually sends the request to the origin
16
+ const res = await request . next ( )
17
+ const message = `This was static but has been transformed in ${ req . geo . city } `
18
+
19
+ // Transform the response HTML and props
20
+ res . replaceText ( 'p[id=message]' , message )
21
+ res . setPageProp ( 'message' , message )
22
+ res . setPageProp ( 'showAd' , true )
23
+
24
+ return res
25
+ }
26
+
27
+ if ( pathname . startsWith ( '/api/hello' ) ) {
28
+ // Add a header to the request
29
+ req . headers . set ( 'x-hello' , 'world' )
30
+ return request . next ( )
31
+ }
32
+
33
+ if ( pathname . startsWith ( '/headers' ) ) {
34
+ // Add a header to the rewritten request
35
+ req . headers . set ( 'x-hello' , 'world' )
36
+ return request . rewrite ( '/api/hello' )
37
+ }
9
38
10
39
if ( pathname . startsWith ( '/cookies' ) ) {
11
40
response = NextResponse . next ( )
@@ -15,15 +44,15 @@ export function middleware(request: NextRequest, ev: NextFetchEvent) {
15
44
16
45
if ( pathname . startsWith ( '/shows' ) ) {
17
46
if ( pathname . startsWith ( '/shows/rewrite-absolute' ) ) {
18
- response = NextResponse . rewrite ( new URL ( '/shows/100' , request . url ) )
47
+ response = NextResponse . rewrite ( new URL ( '/shows/100' , req . url ) )
19
48
response . headers . set ( 'x-modified-in-rewrite' , 'true' )
20
49
}
21
50
if ( pathname . startsWith ( '/shows/rewrite-external' ) ) {
22
51
response = NextResponse . rewrite ( 'http://example.com/' )
23
52
response . headers . set ( 'x-modified-in-rewrite' , 'true' )
24
53
}
25
54
if ( pathname . startsWith ( '/shows/rewriteme' ) ) {
26
- const url = request . nextUrl . clone ( )
55
+ const url = req . nextUrl . clone ( )
27
56
url . pathname = '/shows/100'
28
57
response = NextResponse . rewrite ( url )
29
58
response . headers . set ( 'x-modified-in-rewrite' , 'true' )
0 commit comments