middleware.js
middleware.js|ts
檔案用於編寫 中介軟體 (Middleware),並在請求完成前於伺服器端執行程式碼。根據傳入的請求,您可以透過重寫、重新導向、修改請求或回應標頭,或直接回應來修改回應內容。
中介軟體會在路由渲染前執行,特別適用於實作自訂的伺服器端邏輯,例如身份驗證、日誌記錄或處理重新導向。
在專案根目錄中使用 middleware.ts
(或 .js) 檔案來定義中介軟體。例如,與 app
或 pages
同層級,或放在 src
目錄中 (如果適用)。
匯出項目
中介軟體函式
檔案必須匯出單一函式,可以是預設匯出或命名為 middleware
。請注意,不支援從同一個檔案匯出多個中介軟體。
設定物件 (選用)
可選地,可以與中介軟體函式一起匯出一個設定物件。此物件包含 matcher 來指定中介軟體適用的路徑。
Matcher
matcher
選項允許您指定中介軟體執行的特定路徑。您可以透過以下幾種方式指定這些路徑:
- 單一路徑:直接使用字串定義路徑,例如
'/about'
。 - 多個路徑:使用陣列列出多個路徑,例如
matcher: ['/about', '/contact']
,這會讓中介軟體同時套用於/about
和/contact
。
此外,matcher
支援透過正則表達式指定複雜路徑,例如 matcher: ['/((?!api|_next/static|_next/image|.*\\.png$).*)']
,可精確控制要包含或排除的路徑。
matcher
選項也接受物件陣列,包含以下鍵值:
source
:用於匹配請求路徑的路徑或模式。可以是直接匹配路徑的字串,或用於更複雜匹配的模式。regexp
(選用):正則表達式字串,根據來源微調匹配。提供對包含或排除路徑的額外控制。locale
(選用):布林值,設為false
時忽略基於地區設定的路由匹配。has
(選用):根據特定請求元素 (如標頭、查詢參數或 cookies) 的存在條件進行設定。missing
(選用):專注於某些請求元素缺失的條件,例如缺少標頭或 cookies。
參數
request
定義中介軟體時,預設匯出函式接受單一參數 request
。此參數是 NextRequest
的實例,代表傳入的 HTTP 請求。
須知:
NextRequest
是代表 Next.js 中介軟體中傳入 HTTP 請求的類型,而NextResponse
是用於操作和發送回 HTTP 回應的類別。
NextResponse
中介軟體可以使用 NextResponse
物件,它擴展了 Web Response API。透過回傳 NextResponse
物件,您可以直接操作 cookies、設定標頭、實作重新導向和重寫路徑。
須知:對於重新導向,您也可以使用
Response.redirect
而非NextResponse.redirect
。
執行環境 (Runtime)
中介軟體預設使用 Edge 執行環境 (Edge runtime)。若不需要此設定,您可以使用 完整的 Node.js 執行環境 來執行中介軟體。