Next.js middleware 的非預期行為
date
Jan 11, 2025
slug
nextjs-middleware-issue
status
Published
tags
Frontend
Next.JS
summary
遇到非預期的行為,先來記錄一下,避免自己又踩到
type
Post
目前正在想如何把 custom server 移掉,發現 middleware 有個不在 Docs 上的行為,也找不太到 issue,先記錄在這邊。
用以下的範例簡單說明,假如目前 pages 下有一個 foo.tsx,middleware 處想要在特定的情況下回傳特定的 json 頁面,可能會寫成:
當 SSR 時,進入
/foo
且滿足條件 someCondition
時,會是預期的回 { message: 'foo' }
的 json。但如果是 Client Routing 進入時,則會是顯示 pages 下的頁面 (而 dev mode 會去 fetch middleware 拿回 json,production build 則不會)。雖然平常不太會有有頁面但還需要直回 json 的情境,但這個行為有點非預期,而觸發的情境看起來是和 status code 2xx 有關,看來目前 middleware 只支援 Response 回傳 4xx 和 5xx,而其餘都是需要走 rewrite / redirect 或是直接 pass 到後面。