미들웨어란?
Request ----> Server ----> 서버내 함수(handler = controler()) ----> DB
그런데 로그인이랑 인증 요청을 처리하려면
컨트롤러 전에 믿르웨어를 사용해야 함.
Request ----> Server ----> 1. log() ----> 2. auth() -----> 서버내 함수(handler = controller()) ----> DB
아래 두개가 미들웨어
1. log(): 요청사항을 log해주는 함수
2. auth(): 인증쿠키 처리해주는 함
여기서 틀린게 없으면 인증 미들웨어가 controller에게 요청사항을 전달해줌
중간에 있느 소프트웨어지
어떤 중간에?
처음 유저가 보낸 request와 종착지(controller) 중간에 있는 함수!!!
node.js에서 많이 사용함.
server 파일이 따로 있음.
이 파일안에 사용하고 싶은 미들웨어들을 정리해놓음
근데 next.js는 서버리스임. server파일 없다.
근데 미들웨어 사용 가능!!!
client/useUser hook 모든 페이지에 사용해야 하는데. 이런걸 미들웨어로 만들어야지 루트폴터 안에 미들웨어 함수 적으면 됨.(12.2.0부터 루트에) middleware라고 적음 됨.
pages폴더
코드를 어디에 적느냐에 따라 스코프 설정이 됨.
페이지 바꿀 때마다 동작하게 하고싶다? -> 루트폴더에 미들웨어 작성또는 프로파일 폴더 안에서만 움직일 때 동작하게 하고싶다? 해당 폴더에 미들웨어 작성https://nextjs.org/docs/messages/nested-middleware
import type { NextRequest, NextFetchEvent } from "next/server";
export function middleware(req: NextRequest, ev: NextFetchEvent) {
if (req.nextUrl.pathname.startsWith("/about")) {
// This logic is only applied to /about
}
if (req.nextUrl.pathname.startsWith("/dashboard")) {
// This logic is only applied to /dashboard
}
}
이제 그냥 루트에 있는 미들웨어 파일하나로 다 써야함. 경로로 구분 하면 됨.
middleware.ts라는 이름의 파일을 root에 만들어라.
middleware
1. API 핸들러에 요청 보낼 때도 실행 됨.
2. 페이지 이동할
19.1 Responses and Redirections
import { NextFetchEvent, userAgent } from "next/server";
import type { NextRequest } from "next/server";
import { NextResponse } from "next/server";
export function middleware(req: NextRequest, ev: NextFetchEvent) {
const ua = userAgent(req);
// console.log(ua);
// if (ua?.isBot) {
// return new Response("Please don't be bot"); //no longer works
// }
if (!req.url.includes("/api")) {
if (!req.url.includes("/enter") && !req.cookies.has("carrotsession")) {
return NextResponse.redirect(new URL("/enter", req.url));
}
// if (req.nextUrl.pathname.startsWith("/chats")) {
// console.log("chats");
// }
}
// req.geo?.country
// hosting provider 에 따라 다름.
}
'클론코딩-캐럿마켓 > 후반' 카테고리의 다른 글
Next.js - SSG 19.9 Blog Section && 19.10 getStaticProps (0) | 2023.01.21 |
---|---|
Next.js - 19.6 getServerSideProps + 19.7 SSR + SWR (0) | 2023.01.20 |
Next.js - 19.5 Script Component (0) | 2023.01.20 |
Next.js - 19.4 _document and Fonts 최적화 (0) | 2023.01.19 |
Next.js - 19.2 Dynamic Imports && 19.3 Lazy-load Imports (0) | 2023.01.17 |