Nuxt3 的伺服器引擎是使用 Nitro,Nitro 有內建的代理服務,要使用很方便,只要在 nuxt.config.ts 加上下面這幾行即可:
上面的設定會把所有 /api 開頭的請求轉送到 http://localhost:8888/api
呼叫 API 示範:
實際請求的連結: http://localhost:8888/api/users/1
延伸閱讀: 在 Nuxt3 中呼叫 API 示範
不過需要注意的是上面的是 devProxy ,也就是開發時的代理,在正式環境中是不會運作的。
Nitro 最近推出了一個實驗性功能,可以使用 routeRules 代理,依照官方的說法是只要依照下面的設定即可:
還有 vite 的代理方式:
不過上面兩種方式筆者測試了大概 20 幾輪,爬了一堆文章,都沒有辦法成功,最後是透過第三方套件,如果有成功的高手還請指點!
參考資料:
GitHub nuxt/nuxt Discussions - How to proxy api requests? #15907
Nitro - config #devProxy
Nuxt - Server Engine
Stack Overflow - How do I set proxy in Nuxt3?
export default defineNuxtConfig({
nitro: {
devProxy: {
"/api": {
target: "http://localhost:8888/api", // 代理的目標地址
changeOrigin: true,
}
}
}
})
上面的設定會把所有 /api 開頭的請求轉送到 http://localhost:8888/api
呼叫 API 示範:
const url = '/api/users/1';
const {data, pending, error, refresh} = await useFetch(url, {
method: 'GET',
});
實際請求的連結: http://localhost:8888/api/users/1
延伸閱讀: 在 Nuxt3 中呼叫 API 示範
不過需要注意的是上面的是 devProxy ,也就是開發時的代理,在正式環境中是不會運作的。
Nitro 最近推出了一個實驗性功能,可以使用 routeRules 代理,依照官方的說法是只要依照下面的設定即可:
export default defineNuxtConfig({
nitro: {
routeRules: {
'/api': {
proxy: 'http://localhost:8888'
},
},
}
})
還有 vite 的代理方式:
export default defineNuxtConfig({
vite: {
server: {
proxy: {
'/api': {
target: 'http://localhost:8888',
changeOrigin: true,
},
},
},
},
})
不過上面兩種方式筆者測試了大概 20 幾輪,爬了一堆文章,都沒有辦法成功,最後是透過第三方套件,如果有成功的高手還請指點!
參考資料:
GitHub nuxt/nuxt Discussions - How to proxy api requests? #15907
Nitro - config #devProxy
Nuxt - Server Engine
Stack Overflow - How do I set proxy in Nuxt3?
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com