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

須知事項:路由處理器僅在
app
目錄內可用。它們等同於pages
目錄中的 API 路由 (API Routes),這意味著您不需要同時使用 API 路由和路由處理器。
慣例
路由處理器定義在 app
目錄中的 route.js|ts
檔案:
路由處理器可以像 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
對其進行擴展,為進階用例提供便利的輔助功能。
行為
快取
當使用 GET
方法與 Response
物件時,路由處理器預設會被快取。
TypeScript 警告:
Response.json()
僅在 TypeScript 5.2 及以上版本有效。如果您使用較低版本的 TypeScript,可以使用NextResponse.json()
來替代以獲得類型化回應。
選擇退出快取
您可以透過以下方式選擇退出快取:
- 在
GET
方法中使用Request
物件。 - 使用任何其他 HTTP 方法。
- 使用 動態函數 (Dynamic Functions) 如
cookies
和headers
。 - 區段配置選項 (Segment Config Options) 手動指定動態模式。
例如:
同樣地,POST
方法會導致路由處理器被動態評估。
須知事項:與 API 路由類似,路由處理器可用於處理表單提交等情況。目前正在開發一個與 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 方法。
範例
以下範例展示如何將路由處理器與其他 Next.js API 和功能結合使用。
重新驗證快取資料
您可以使用 next.revalidate
選項來重新驗證快取資料:
或者,您可以使用 revalidate
區段配置選項:
動態函數
路由處理器可以與 Next.js 的動態函數一起使用,例如 cookies
和 headers
。
Cookies
您可以使用 next/headers
中的 cookies
來讀取或設定 cookies。這個伺服器函數可以直接在路由處理器中呼叫,或嵌套在其他函數中。
或者,您可以使用 Set-Cookie
標頭返回一個新的 Response
。
您也可以使用底層 Web API 從請求 (NextRequest
) 中讀取 cookies:
Headers
您可以使用 next/headers
中的 headers
來讀取標頭。這個伺服器函數可以直接在路由處理器中呼叫,或嵌套在其他函數中。
這個 headers
實例是唯讀的。要設定標頭,您需要返回一個帶有新 headers
的新 Response
。
您也可以使用底層 Web API 從請求 (NextRequest
) 中讀取標頭:
重新導向
動態路由區段
建議繼續閱讀前先了解定義路由 (Defining Routes) 頁面。
路由處理器可以使用動態區段 (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 查詢參數
傳遞給路由處理器的請求物件是一個 NextRequest
實例,它具有一些額外的便利方法,包括更輕鬆地處理查詢參數。
串流
串流通常與大型語言模型 (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 方法為特定的路由處理器 (Route Handler) 設定 CORS 標頭:
須知事項:
- 若要為多個路由處理器添加 CORS 標頭,你可以使用中介軟體 (Middleware) 或
next.config.js
檔案。- 或者,參考我們的 CORS 範例套件。
網路鉤子 (Webhooks)
你可以使用路由處理器來接收來自第三方服務的網路鉤子:
值得注意的是,與使用 Pages Router 的 API 路由不同,你不需要使用 bodyParser
或任何額外的配置。
Edge 和 Node.js 執行環境 (Runtimes)
路由處理器具有同構的 Web API,可無縫支援 Edge 和 Node.js 執行環境,包括串流支援。由於路由處理器使用與頁面和佈局相同的路由區段配置 (route segment configuration),因此支援期待已久的功能,例如通用的靜態重新生成 (statically regenerated) 路由處理器。
你可以使用 runtime
區段配置選項來指定執行環境:
非 UI 回應 (Non-UI Responses)
你可以使用路由處理器來回傳非 UI 內容。請注意,sitemap.xml
、robots.txt
、app icons
和 open graph images 都有內建支援。
區段配置選項 (Segment Config Options)
路由處理器使用與頁面和佈局相同的路由區段配置 (route segment configuration)。
詳情請參閱 API 參考文件。