webroad.online
  1. 1Веб
  2. 2HTML
  3. 3CSS
  4. 4JavaScript
  5. 5TypeScript
  6. 6Git
  7. 7Инструменты
  8. 8React
  9. 9Стейт-менеджмент
  10. 10Next.js
  11. 11Формы
  12. 12Данные и бэкенд
  13. 13SEO
  14. 14Tailwind CSS
  15. 15Анимации
  16. 16Тестирование
  17. 17Архитектура
Next.js · Урок 10 из 12

Route Handlers и Proxy

API через route.ts, стандартные Request/Response и proxy.ts.

Обновлено

Что такое Route Handler

Route Handler — HTTP-эндпоинт, написанный в app/: файл route.ts, который экспортирует функции с именами HTTP-методов. Он получает стандартный Request и возвращает стандартный Response — ровно те Web API, что в уроке fetch.

// app/api/posts/route.ts  →  /api/posts
export async function GET(request: Request) {
  const q = new URL(request.url).searchParams.get('q') ?? ''
  return Response.json(await searchPosts(q))
}

export async function POST(request: Request) {
  const body = await request.json()
  return Response.json(await createPost(body), { status: 201 })
}
  • Поддерживаемые методы: GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS.
  • route.ts и page.tsx не могут лежать в одной папке.
  • Динамические сегменты работают так же: app/api/posts/[id]/route.ts.

Когда использовать Route Handlers

Ситуация Route Handler?
вебхук от Stripe, CMS, GitHub да
API для мобильного приложения / партнёров да
RSS, свой sitemap, генерируемые файлы, изображения да
прокси к внешнему API (скрыть ключ, обойти CORS) да
форма вашего приложения нет → Server Action
данные страницы нет → Server Component

Что такое Proxy

Proxy (proxy.ts в корне проекта — бывший middleware) — код, который выполняется до каждого подходящего запроса, до того как он дойдёт до страницы. Может перенаправить, переписать URL, изменить заголовки и cookie или ответить сам.

// proxy.ts
import { NextResponse, type NextRequest } from 'next/server'

export function proxy(request: NextRequest) {
  if (!request.cookies.has('session') && request.nextUrl.pathname.startsWith('/dashboard')) {
    return NextResponse.redirect(new URL(`/login?next=${request.nextUrl.pathname}`, request.url))
  }
}

export const config = { matcher: ['/dashboard/:path*'] }

Это приложение использует proxy.ts, чтобы выдать вам анонимный cookie vid и направить на нужный язык.

Что класть в proxy — а что нет

Да Нет
редиректы по URL / cookie медленные запросы к БД
оптимистичные проверки авторизации («есть cookie сессии?») полную авторизацию — повторите её в странице / действии
заголовки безопасности, A/B-тесты, i18n бизнес-логику
установку cookie кэшированные запросы

Коротко

  • Route Handler = route.ts с функциями GET/POST, Request → Response.
  • Для вебхуков и внешних API; ваши формы идут через Server Actions.
  • Proxy выполняется до запроса: редиректы, заголовки, cookie — быстро и просто.

Официальные источники

Упражнения

Была ли страница полезной?

Один клик — без регистрации.