Middleware

Middleware — функция, которая выполняется между запросом пользователя и ответом сервера.

1
2
3
4
5
// middleware.ts (в корне проекта)export function middleware(request: NextRequest) { // Делаем что-то с запросом return NextResponse.next(); // Пропускаем дальше}

🛠️ ДЛЯ ЧЕГО НУЖНО?

  • Защита страниц - Проверяет авторизацию до показа страницы
  • Редиректы - Перенаправляет пользователя
  • Проксирование API - Скрывает реальные API за своим URL
  • Добавление заголовков - Добавляет X-Custom-Header
  • Логирование - Записывает все запросы
  • Гео-таргетинг - Определяет страну и редиректит

📍 ЧАСТЫЕ КЕЙСЫ

  • Защита админки
    1
    2
    3
    4
    const token = request.cookies.get('token');if (pathname.startsWith('/admin') && !token) { return NextResponse.redirect(new URL('/login', request.url));}
  • Редирект со старых URL
    1
    2
    3
    if (pathname === '/old-blog') { return NextResponse.redirect(new URL('/blog', request.url));}
  • Проксирование API (скрываем реальный URL)
    1
    2
    3
    4
    if (pathname === '/api/weather') { const data = await fetch(`https://api.weatherapi.com/...`); return NextResponse.json(data);}
  • Добавление заголовков
    1
    2
    3
    const response = NextResponse.next();response.headers.set('X-Request-ID', crypto.randomUUID());return response;
  • A/B тестирование
    1
    2
    const variant = Math.random() < 0.5 ? 'A' : 'B';return NextResponse.rewrite(new URL(`/ab/${variant}${pathname}`, request.url));

Действия

  • return NextResponse.next() - Пропустить
  • return NextResponse.redirect(url) - Редирект
  • return NextResponse.rewrite(url) - Подменить
  • return NextResponse.json() - Ответить JSON
  • response.headers.set('key', 'value') - Добавить заголовок