-
Notifications
You must be signed in to change notification settings - Fork 0
/
middleware.ts
32 lines (27 loc) · 994 Bytes
/
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
import { NextRequest, NextResponse } from 'next/server';
import { getRedirect } from './lib/notion';
import { kebabToSpace } from './utils/url';
export default async function middleware(req: NextRequest) {
if (req.nextUrl.pathname.startsWith('/link/')) {
const path = req.nextUrl.pathname.split('/')[2];
const displayPath = kebabToSpace(path);
const redirectData = await getRedirect(displayPath);
if (redirectData.display.includes(displayPath)) {
try {
await fetch(req.nextUrl.origin + '/api/increment', {
method: 'POST',
body: JSON.stringify(redirectData),
headers: {
'Content-Type': 'application/json',
},
});
return NextResponse.redirect(redirectData.redirect);
} catch (error) {
// eslint-disable-next-line no-console
console.error(`increment for ${redirectData.display}:`, { error });
}
} else {
return NextResponse.redirect('/404');
}
}
}