路由處理器 (Route Handlers)
路由處理器 (Route Handlers) 讓您能夠使用 Web 的 Request 和 Response API 為指定路由建立自訂請求處理器。

須知:路由處理器 (Route Handlers) 僅在
app
目錄內可用。它們等同於pages
目錄中的 API 路由 (API Routes),這意味著您不需要同時使用 API 路由和路由處理器。
慣例
路由處理器 (Route Handlers) 定義在 app
目錄中的 route.js|ts
檔案:
路由處理器 (Route Handlers) 可以像 page.js
和 layout.js
一樣嵌套在 app
目錄中。但在與 page.js
相同的路由區段層級不能存在 route.js
檔案。
支援的 HTTP 方法
支援以下 HTTP 方法:GET
、POST
、PUT
、PATCH
、DELETE
、HEAD
和 OPTIONS
。如果呼叫了不支援的方法,Next.js 將返回 405 Method Not Allowed
回應。
擴展的 NextRequest
和 NextResponse
API
除了支援原生的 Request 和 Response,Next.js 還透過 NextRequest
和 NextResponse
對其進行擴展,為進階使用場景提供便利的輔助功能。
行為
快取 (Caching)
當使用 GET
方法與 Response
物件時,路由處理器 (Route Handlers) 預設會被快取。
TypeScript 警告:
Response.json()
僅在 TypeScript 5.2 及以上版本有效。如果您使用較低版本的 TypeScript,可以使用NextResponse.json()
來獲得類型化的回應。
退出快取
您可以透過以下方式退出快取:
- 在
GET
方法中使用Request
物件。 - 使用任何其他 HTTP 方法。
- 使用 動態函數 (Dynamic Functions) 如
cookies
和headers
。 - 在 區段配置選項 (Segment Config Options) 中手動指定動態模式。
例如:
同樣地,POST
方法會導致路由處理器 (Route Handler) 被動態評估。
須知:與 API 路由 (API Routes) 類似,路由處理器 (Route Handlers) 可用於處理表單提交等場景。目前正在開發一個與 React 深度整合的表單和變異處理 (handling forms and mutations) 新抽象層。
路由解析
您可以將 route
視為最低層級的路由原始元件。
- 它們不參與像
page
一樣的佈局或客戶端導航。 - 在與
page.js
相同的路由中不能存在route.js
檔案。
頁面 | 路由 | 結果 |
---|---|---|
app/page.js | app/route.js | 衝突 |
app/page.js | app/api/route.js | 有效 |
app/[user]/page.js | app/api/route.js | 有效 |
每個 route.js
或 page.js
檔案會接管該路由的所有 HTTP 動詞。
範例
以下範例展示如何將路由處理器 (Route Handlers) 與其他 Next.js API 和功能結合使用。
重新驗證快取資料
您可以使用 next.revalidate
選項來重新驗證快取資料:
或者,您可以使用 revalidate
區段配置選項:
動態函數 (Dynamic Functions)
路由處理器 (Route Handlers) 可以與 Next.js 的動態函數 (Dynamic Functions) 一起使用,例如 cookies
和 headers
。
Cookies
您可以使用 next/headers
中的 cookies
來讀取 cookies。這個伺服器函數可以直接在路由處理器 (Route Handler) 中呼叫,或嵌套在其他函數中。
這個 cookies
實例是唯讀的。要設定 cookies,您需要使用 Set-Cookie
標頭返回一個新的 Response
。
或者,您可以使用基於底層 Web API 的抽象來讀取 cookies (NextRequest
):
Headers
您可以使用 next/headers
中的 headers
來讀取標頭。這個伺服器函數可以直接在路由處理器 (Route Handler) 中呼叫,或嵌套在其他函數中。
這個 headers
實例是唯讀的。要設定標頭,您需要返回一個帶有新 headers
的新 Response
。
或者,您可以使用基於底層 Web API 的抽象來讀取標頭 (NextRequest
):
重新導向 (Redirects)
動態路由區段 (Dynamic Route Segments)
建議繼續閱讀之前先了解定義路由 (Defining Routes) 頁面。
路由處理器 (Route Handlers) 可以使用動態區段 (Dynamic Segments) 從動態資料建立請求處理器。
路由 | 範例 URL | params |
---|---|---|
app/items/[slug]/route.js | /items/a | { slug: 'a' } |
app/items/[slug]/route.js | /items/b | { slug: 'b' } |
app/items/[slug]/route.js | /items/c | { slug: 'c' } |
URL 查詢參數 (Query Parameters)
傳遞給路由處理器 (Route Handler) 的請求物件是一個 NextRequest
實例,它提供了一些額外的便利方法,包括更輕鬆地處理查詢參數。
串流 (Streaming)
串流技術常與大型語言模型 (LLMs) 如 OpenAI 結合使用,用於生成 AI 內容。了解更多關於 AI SDK 的資訊。
這些抽象層使用了 Web API 來建立串流。你也可以直接使用底層的 Web API。
請求主體 (Request Body)
你可以使用標準的 Web API 方法來讀取 Request
主體:
表單資料請求主體 (Request Body FormData)
你可以使用 request.formData()
函數來讀取 FormData
:
由於 formData
的資料都是字串,你可能會想使用 zod-form-data
來驗證請求並以你偏好的格式(例如 number
)獲取資料。
CORS
你可以使用標準的 Web API 方法在 Response
上設定 CORS 標頭:
Edge 和 Node.js 執行環境 (Runtimes)
路由處理器 (Route Handlers) 具有同構的 Web API,可無縫支援 Edge 和 Node.js 執行環境,包括串流支援。由於路由處理器使用與頁面和佈局相同的 路由段配置,因此支援長期期待的功能,例如通用的 靜態重新生成 路由處理器。
你可以使用 runtime
段配置選項來指定執行環境:
非 UI 回應 (Non-UI Responses)
你可以使用路由處理器來返回非 UI 內容。請注意,sitemap.xml
、robots.txt
、app icons
和 open graph images 都有內建支援。
段配置選項 (Segment Config Options)
路由處理器使用與頁面和佈局相同的 路由段配置。
詳情請參閱 API 參考文件。