Next.js 14 - Middleware, Matcher

2025. 12. 3. 15:50·♣️ Next.js 14

Next.js 14

 

 

✅ Middleware, Matcher 사용 예시


(/middleware.ts)

import { NextRequest, NextResponse } from "next/server";
import getSession from "./lib/session";

interface Routes {
  [key: string]: boolean;
}

const publicOnlyUrls: Routes = {
  "/": true,
  "/login": true,
  "/sms": true,
  "/create-account": true,
  "/github/start": true,
  "/github/complete": true,
};

export async function middleware(request: NextRequest) {
  const session = await getSession();
  const exists = publicOnlyUrls[request.nextUrl.pathname];
  if (!session.id) {
    if (!exists) {
      return NextResponse.redirect(new URL("/", request.url));
    }
  } else {
    if (exists) {
      return NextResponse.redirect(new URL("/home", request.url));
    }
  }
}

export const config = {
  matcher: ["/((?!_next/static|_next/image|favicon.ico).*)"],
};

/* const publicUrls = new Set(["/", "/login", "/sms", "/create-account"]);

export async function middleware(request: NextRequest) {
  const isPublicPath = publicUrls.has(request.nextUrl.pathname);
  const isLoggedIn = Boolean((await getSession()).id);

  if (!isLoggedIn && !isPublicPath) {
    return NextResponse.redirect(new URL("/", request.url));
  }

  if (isLoggedIn && isPublicPath) {
    return NextResponse.redirect(new URL("/home", request.url));
  }
} */

 

matcher 안에는 source와 missing이라는 속성이 들어갈 수 있다.

(객체 안에 source와 missing을 담아 matcher 안에 담을 수 있다.)

 

missing: [{type: "header", key: "next-router-prefetch"}]

-> header가 없을 때 middleware를 실행함

'♣️ Next.js 14' 카테고리의 다른 글

Next.js 14 - 원 단위로 바꾸기, 날짜 포맷하기  (0) 2025.12.03
Next.js 14 - Image component  (0) 2025.12.03
Next.js 14 - useFormState(useActionState)  (0) 2025.09.17
Next.js 14 - useFormStatus  (0) 2025.09.17
Next.js 14 - Server Action  (0) 2025.09.17
'♣️ Next.js 14' 카테고리의 다른 글
  • Next.js 14 - 원 단위로 바꾸기, 날짜 포맷하기
  • Next.js 14 - Image component
  • Next.js 14 - useFormState(useActionState)
  • Next.js 14 - useFormStatus
j2yonghwa
j2yonghwa
Trying to be a fullstack developer 🚀
  • j2yonghwa
    j2yonghwa
    j2yonghwa
  • 전체
    오늘
    어제
    • 분류 전체보기 (156)
      • ⏰ Daily WakaTime (1)
      • 🏖️ 노마드코더 (2)
      • 🍺 Dev Setup (3)
      • 🔭 Tech Info (1)
      • 🚫 Error (1)
      • 📂 라이브러리 (23)
      • ♣️ Next.js 14 (10)
      • ♠️ Next.js 12 (20)
      • 🛸 React Native (12)
      • 🦋 TypeScript (1)
      • 🐍 Python (2)
      • 🌊 TailwindCSS (4)
      • 🧩 SQL (25)
      • 💎 Prisma (5)
      • 🌱 MongoDB (4)
      • 🎯 Redis (1)
      • 🧬 GraphQL (2)
      • 🔥 Firebase (7)
      • 💸 Third-Party Services (2)
      • 🕸️ Web (1)
      • 🏆 코딩테스트 (23)
      • 📙 모딥다 (5)
      • 📗 코테 합격자 되기 -JS- (0)
      • 📘 클린코드 (0)
      • 🍯 꿀팁 🐝 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃헙
  • 공지사항

  • 인기 글

  • 태그

    next.js 12
    0레벨
    Next.js
    React Native
    mongoDB
    라이브러리
    코딩테스트 입문
    MySQL
    dev setup
    next.js 14
    react router
    Python
    tailwindcss
    PostgreSQL
    Prisma
    Firebase
    모딥다
    API
    자바스크립트
    SQL
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
j2yonghwa
Next.js 14 - Middleware, Matcher
상단으로

티스토리툴바