NextJS middleware에 대해서 알아본다.
밑에꺼는 구버젼 문법인데,
업그레이드 되면서 문법이 바뀜ㅜㅜㅜㅜㅜㅜ
그래도 밑의 부분을 이해하고 있으면,
업그레이드 버젼도 이해할 수 있을거라 봄.
https://nextjs.org/docs/messages/middleware-relative-urls
https://nextjs.org/docs/advanced-features/middleware
https://github.com/vercel/next.js/tree/canary/examples/middleware
https://nextjs.org/docs/messages/returning-response-body-in-middleware
https://nextjs.org/docs/messages/middleware-upgrade-guide
root폴더에서 middleware.ts 파일을 생성
import { NextFetchEvent, NextResponse } from 'next/server'
import type { NextRequest } from 'next/server'
export function middleware(req: NextRequest, ev: NextFetchEvent) {
// if (req.cookies) {
// const url = req.nextUrl.clone()
// url.pathname = '/enter'
// return NextResponse.rewrite(url)
// }
if (!req.url.includes('/api')) {
if (!req.url.includes('/enter') && !req.cookies.applemarket) {
return NextResponse.redirect('/enter')
}
}
///url설정을 안하면, 모든 경로 및 API에 적용되는 middleware가 됨.
///위에꺼는 예시, session이 없으면, /enter로 redirect되게 설정
return NextResponse.json({ ok: true })
///response를 하는 형식, 반드시 return, NextResponse 형식이로~
if (req.nextUrl.pathname.startsWith('/profile')) {
console.log('it works! This is Profile')
}
///url중 /profile로 시작되는 path에 대해서만 적용되는 middleware
if (req.nextUrl.pathname.startsWith('/chat')) {
console.log('it works! This is chat')
}
///url중 /chat 시작되는 path에 대해서만 적용되는 middleware
}