Route Handlers in Next.js – Custom Request Handling with Web APIs and Typed Context

Route Handlers in Next.js allow you to define custom HTTP request handlers directly within the app directory. This article explains how to create route.ts files, use supported HTTP methods like GET and POST, leverage NextRequest and NextResponse, control caching, and type route parameters using RouteContext.

NextRequestNextResponseRouteContext

~2 دقیقه مطالعه · آخرین به‌روزرسانی ۳ آبان ۱۴۰۴

What Are Route Handlers?


Route Handlers in Next.js let you define custom logic for HTTP requests using the native Request and Response APIs. They are only available inside the app directory and replace the need for traditional API Routes.


File Structure


Create a route.ts file inside any folder in the app directory:

// app/api/route.ts
export async function GET(request: Request) {
  // Handle GET request
}

Note: You cannot place a route.ts file at the same level as a page.tsx file.


Supported HTTP Methods


Route Handlers support the following methods:

  • GET
  • POST
  • PUT
  • PATCH
  • DELETE
  • HEAD
  • OPTIONS

Unsupported methods return a 405 Method Not Allowed response.


Using NextRequest and NextResponse


Next.js extends the native APIs with NextRequest and NextResponse for advanced use cases like cookies, headers, and URL parsing.


Caching GET Requests


By default, Route Handlers are not cached. To cache a GET method, use the dynamic = 'force-static' config:

// app/items/route.ts
export const dynamic = 'force-static'

export async function GET() {
  const res = await fetch('https://data.mongodb-api.com/...', {
    headers: {
      'Content-Type': 'application/json',
      'API-Key': process.env.DATA_API_KEY,
    },
  })
  const data = await res.json()
  return Response.json({ data })
}

Other HTTP methods are never cached, even if defined in the same file.


Route Conflicts


Route Handlers cannot coexist with page.tsx at the same path level:

PageRouteResult
app/page.jsapp/route.jsConflict ❌
app/page.jsapp/api/route.jsValid ✅
app/[user]/page.jsapp/api/route.jsValid ✅

Typing Route Parameters with RouteContext


Use RouteContext to type route parameters in TypeScript:

// app/users/[id]/route.ts
import type { NextRequest } from 'next/server'

export async function GET(_req: NextRequest, ctx: RouteContext<'/users/[id]'>) {
  const { id } = await ctx.params
  return Response.json({ id })
}

Note: Types are generated during next dev, next build, or next typegen.


Conclusion


Route Handlers in Next.js offer a powerful way to manage HTTP requests directly within your app structure. With support for multiple methods, typed context, and caching control, they provide a clean and scalable alternative to traditional API routes.


نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

مقالات مرتبط

Advanced Client-Side Routing and Performance Hooks in Next.js

Next.js provides a rich set of client-side hooks and caching utilities that empower developers to build dynamic, responsive, and secure applications. From reading route parameters to tracking navigation state and reporting performance metrics, this guide walks you through the most important tools available in the App Router.

ادامه

Handling Authorization and Caching in Next.js: A Developer’s Guide

Next.js introduces powerful experimental features for access control and smart caching. This guide covers the unauthorized() function for custom 401 handling, unstable_cache for persistent memoization, updateTag for instant cache invalidation, and useLinkStatus for inline navigation feedback. Learn how to use these tools to build secure, performant, and responsive applications.

ادامه

redirect and refresh in Next.js — Smart Redirects and Client Refreshing via Server Actions

The redirect function in Next.js allows you to navigate users to a new route, returning either a 307 or 303 HTTP response depending on context. It works in Server Components, Client Components, Route Handlers, and Server Actions. The refresh function is used exclusively within Server Actions to refresh the client router. This article explains how both functions work, with practical examples and key considerations.

ادامه

NextRequest and NextResponse in Next.js — Managing Cookies, Headers, Redirects, and Rewrites

Next.js extends the native Web Request and Response APIs with NextRequest and NextResponse, offering powerful tools for managing cookies, headers, redirects, rewrites, and JSON responses. These utilities simplify server-side logic and improve control over routing, personalization, and security. This guide walks through their capabilities with practical examples and best practices.

ادامه

headers, ImageResponse, notFound, and permanentRedirect in Next.js — Request Handling, Dynamic Images, Errors, and Redirects

Next.js offers powerful tools for handling HTTP requests and responses in Server Components. The headers function lets you read incoming request headers. ImageResponse allows you to generate dynamic images using JSX and CSS. The notFound function renders a custom 404 page, and permanentRedirect enables permanent redirection to another route. This article explains how to use each feature with practical examples.

ادامه

A Complete Guide to Using metadata and generateMetadata in Next.js

In modern versions of Next.js, managing page metadata is more powerful and intuitive than ever. Metadata is automatically injected into the <head> of your pages and plays a vital role in SEO, social sharing, and user experience. This guide explains the two main ways to define metadata: using the static metadata object and the dynamic generateMetadata function.

ادامه