整理這些技術筆記真的很花時間,如果你願意 關閉 Adblock 支持我,我會把這份感謝轉換成更多「踩坑轉避坑」的內容給你!ヽ(・∀・)ノ
Nuxt3 使用 Nitro Proxy 解決跨域問題

前言
這一篇來記錄一下如何使用 Nitro Proxy 來解決 Nuxt3 的跨域問題。
Nitro Proxy
首先 Nuxt3 使用了一個全新的伺服器引擎,也就是 Nitro,而 Nitro 本身也提供了一個 Proxy 的功能,可以讓我們在開發時可以輕鬆的解決跨域問題。
剛好我最近在說鞥 Nitro Proxy 的時候發生了一點雷點,所以就順便記錄下來。
依照 Nitro 官方範例來講,只需要這樣寫即可:
1 | |
Note
Nitro 的 Proxy 本身是基於 node-http-proxy 的;其他參數選項你可以參考 node-http-proxy#options。
那麼假設我們遠端 API 是長這樣
1 | |
你可能就會這樣寫:
1 | |
(畢竟許多 Proxy 套件都是這樣寫)
這樣確實是會解決跨域的問題,但是這時候你會發生另一個問題…
也就是不管怎麼打都會變成這樣:
1 | |
這是我一直覺得滿奇怪的地方,所以我就檢查了一下 Proxy Request,發現 Nitro Proxy 會把 /api 給 rewrite 掉變成空白,所以你必須要這樣寫:
1 | |
這樣子在打出去時,才會是正確的網址。
Note
Nitro Proxy 是為了開發時的跨域問題所設計的,因此請勿在正式環境使用;Nitro Proxy 是針對前端打 API 時所使用的,因為後端(SSR)並不會有跨域問題。
那麼有些文章會推薦使用 routeRules,但我看官方文件目前是標注為「Experimental!(實驗)」,所以我就沒特別去使用它了。
Vite Proxy
如果你不想使用 Nitro 的 Proxy 而是想使用 Vite 的 Proxy 的話,依照剛剛的範例來講,你就要這樣寫:
1 | |
這邊是不用補上 /v1 的,因為 Vite 本身就不會 rewrite 掉 /api。
這邊也順便分享我先前寫過的 Vite 中使用 Proxy 解決 CORS 問題,基本上設定都是相同的,你是可以直接參考並使用。
整理這些技術筆記真的很花時間,如果你願意 關閉 Adblock 支持我,我會把這份感謝轉換成更多「踩坑轉避坑」的內容給你!ヽ(・∀・)ノ