Vue3配置代理后頁面500/404問題
問題
項(xiàng)目基礎(chǔ)配置:Vite+Vue-Router 4.0+Vue3
項(xiàng)目進(jìn)入聯(lián)調(diào)階段,開始配置接口代理。由于項(xiàng)目需要單點(diǎn)登錄,于是就給項(xiàng)目增加了一個(gè)域名,也就是vue-router中的base字段。
const router = VueRouter.createRouter({
history: VueRouter.createWebHashHistory('/my-app'),
routes: []
})這個(gè)配置需要配合Vite.config.ts的base字段一起修改:
export default ({ mode }) => {
return defineConfig({
base: '/my-app'
})
}但是配置完后前端頁面一直處于404的狀態(tài),網(wǎng)絡(luò)請求顯示500,我以為是路由的問題各種排查,甚至把官網(wǎng)Vue-Router的實(shí)例down下來,發(fā)現(xiàn)人家都是可以的。
最后一個(gè)一個(gè)配置排查發(fā)現(xiàn),proxy的代理的接口前綴和base重名了,修改代理名稱就可以
export default ({ mode }) => {
return defineConfig({
base: '/my-app',
server: {
open: true,
port: 3000,
host: '0.0.0.0',
proxy: {
'/my-app': {
target: '...',
changeOrigin: true,
ws: true
}
}
}
})
}最后解決方法:調(diào)用接口的地方增加一個(gè)自定義前綴,在vite.config中proxy配置中,增加一個(gè)rewrite即可。
axios.get('/test/my-app/interface1')
export default ({ mode }) => {
return defineConfig({
base: '/my-app',
server: {
open: true,
port: 3000,
host: '0.0.0.0',
proxy: {
'/test': {
target: '...',
changeOrigin: true,
ws: true,
rewrite: (path) => path.replace(/^\/test/, '')
}
}
}
})
}溯源
問題是解決了,但是為什么會(huì)出現(xiàn)這個(gè)問題呢?
base:base 是 Vite 配置中的一個(gè)選項(xiàng),用于指定項(xiàng)目的基本公共路徑。它決定了在構(gòu)建和開發(fā)過程中加載靜態(tài)資源的路徑。如果你的項(xiàng)目部署在子路徑下(例如 https://example.com/my-app/),你可以將 base 設(shè)置為 /my-app/,這樣 Vite 就會(huì)正確地加載靜態(tài)資源。proxy:proxy 是 Vite 配置中的一個(gè)選項(xiàng),用于配置開發(fā)服務(wù)器的代理轉(zhuǎn)發(fā)。通過 proxy,你可以在開發(fā)過程中將特定的 HTTP 請求代理到不同的目標(biāo)地址。這對(duì)于解決前端開發(fā)過程中的跨域問題非常有用。
它們看起來獨(dú)立的配置選項(xiàng),分別用于不同的功能:
base是用于指定項(xiàng)目的基本公共路徑,影響靜態(tài)資源的加載路徑。proxy是用于配置開發(fā)服務(wù)器的代理轉(zhuǎn)發(fā),解決跨域問題。
但是注意base的作用是影響靜態(tài)資源的加載路徑,那么靜態(tài)文件資源是怎么加載呢?
在vite的源碼中(https://github.com/vitejs/vite/blob/main/packages/vite/src/client/overlay.ts),我們可以看見這樣一句代碼:

可以看見,vite是將base拼接的地址通過fetch加載文件,fetch是一個(gè)異步請求,如果此時(shí)base與代理地址重名,那么靜態(tài)資源將會(huì)被代理到服務(wù)器,所以會(huì)出現(xiàn)文件找不到的問題。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
如何通過URL來實(shí)現(xiàn)在Vue中存儲(chǔ)業(yè)務(wù)狀態(tài)實(shí)用技巧
這篇文章主要為大家介紹了如何通過URL來實(shí)現(xiàn)在Vue中存儲(chǔ)業(yè)務(wù)狀態(tài)實(shí)用技巧,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
Vue 對(duì)象和數(shù)據(jù)的強(qiáng)制更新方式
這篇文章主要介紹了Vue 對(duì)象和數(shù)據(jù)的強(qiáng)制更新方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04
vue實(shí)現(xiàn)商品列表的無限加載思路和步驟詳解
這篇文章主要介紹了vue實(shí)現(xiàn)商品列表的無限加載思路和步驟詳解,基礎(chǔ)思路是觸底條件滿足之后 page++,拉取下一頁數(shù)據(jù),結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下,2024-06-06
vuejs手把手教你寫一個(gè)完整的購物車實(shí)例代碼
這篇文章主要介紹了vuejs-手把手教你寫一個(gè)完整的購物車實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
vue3?HighCharts自定義封裝之徑向條形圖的實(shí)戰(zhàn)過程
highcharts是國外知名基于javascript的圖表庫,下面這篇文章主要給大家介紹了關(guān)于vue3?HighCharts自定義封裝之徑向條形圖的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09
vue部署正式環(huán)境上傳nginx后遇到的問題及解決
在Nginx中配置服務(wù)器時(shí),如果頁面和靜態(tài)資源無法訪問,并且后端接口被誤解為前端頁面請求,可以通過為`www-data`用戶賦予目錄訪問權(quán)限來解決2025-12-12
vue后臺(tái)管理添加多語言功能的實(shí)現(xiàn)示例
這篇文章主要介紹了vue后臺(tái)管理添加多語言功能的實(shí)現(xiàn)示例,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下2021-04-04

