-
Notifications
You must be signed in to change notification settings - Fork 87
/
Copy pathmiddleware.ts
98 lines (79 loc) · 2.7 KB
/
middleware.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import type { NextRequest } from 'next/server'
import { NextResponse } from 'next/server'
import { createServerRunner } from '@aws-amplify/adapter-nextjs'
export const { runWithAmplifyServerContext } = createServerRunner({
config: {},
})
export async function middleware(request: NextRequest) {
const response = getResponse(request)
response.headers.append('Deno' in globalThis ? 'x-deno' : 'x-node', Date.now().toString())
response.headers.set('x-hello-from-middleware-res', 'hello')
await runWithAmplifyServerContext({
nextServerContext: { request, response },
operation: async () => {
response.headers.set('x-cjs-module-works', 'true')
},
})
return response
}
const getResponse = (request: NextRequest) => {
const requestHeaders = new Headers(request.headers)
requestHeaders.set('x-hello-from-middleware-req', 'hello')
if (request.nextUrl.pathname === '/test/next') {
return NextResponse.next({
request: {
headers: requestHeaders,
},
})
}
if (request.nextUrl.pathname === '/test/redirect') {
return NextResponse.redirect(new URL('/other', request.url))
}
if (request.nextUrl.pathname === '/test/redirect-with-headers') {
return NextResponse.redirect(new URL('/other', request.url), {
headers: { 'x-header-from-redirect': 'hello' },
})
}
if (request.nextUrl.pathname === '/test/rewrite-target') {
const response = NextResponse.next()
response.headers.set('x-added-rewrite-target', 'true')
return response
}
if (request.nextUrl.pathname === '/test/rewrite-internal') {
return NextResponse.rewrite(new URL('/rewrite-target', request.url), {
request: {
headers: requestHeaders,
},
})
}
if (request.nextUrl.pathname === '/test/rewrite-loop-detect') {
return NextResponse.rewrite(new URL('/test/rewrite-target', request.url), {
request: {
headers: requestHeaders,
},
})
}
if (request.nextUrl.pathname === '/test/rewrite-external') {
const requestURL = new URL(request.url)
const externalURL = new URL(requestURL.searchParams.get('external-url') as string)
externalURL.searchParams.set('from', 'middleware')
return NextResponse.rewrite(externalURL, {
request: {
headers: requestHeaders,
},
})
}
if (request.nextUrl.pathname === '/test/rewrite-and-redirect') {
return NextResponse.redirect(new URL('/other', request.url), {
status: 302,
statusText: 'Found',
headers: {
'x-middleware-rewrite': new URL('/test/should-not-be-rewritten', request.url).toString(),
},
})
}
return NextResponse.json({ error: 'Error' }, { status: 500 })
}
export const config = {
matcher: '/test/:path*',
}