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)地址。這對于解決前端開發(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)文章
ElementPlus 中el-select自定義指令實(shí)現(xiàn)觸底加載請求options數(shù)據(jù)的方法
觸底時(shí),繼續(xù)向后端發(fā)請求獲取下一頁的數(shù)據(jù),請求回來的數(shù)據(jù)合并給options,這篇文章主要介紹了ElementPlus 中el-select自定義指令實(shí)現(xiàn)觸底加載請求options數(shù)據(jù)的操作方法,需要的朋友可以參考下2024-08-08vue-cli 腳手架基于Nightwatch的端到端測試環(huán)境的過程
這篇文章主要介紹了vue-cli 腳手架基于Nightwatch的端到端測試環(huán)境的過程,需要的朋友可以參考下2018-09-09Vue2(三)實(shí)現(xiàn)子菜單展開收縮,帶動(dòng)畫效果實(shí)現(xiàn)方法
這篇文章主要介紹了vue實(shí)現(xiàn)收縮展開效果的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04vue在路由中驗(yàn)證token是否存在的簡單實(shí)現(xiàn)
今天小編就為大家分享一篇vue在路由中驗(yàn)證token是否存在的簡單實(shí)現(xiàn),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11解決antd日期選擇組件,添加value就無法點(diǎn)擊下一年和下一月問題
這篇文章主要介紹了解決antd日期選擇組件,添加value就無法點(diǎn)擊下一年和下一月問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10antdv vue upload自定義上傳結(jié)合表單提交方式
這篇文章主要介紹了antdv vue upload自定義上傳結(jié)合表單提交方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10vue+element加入簽名效果(移動(dòng)端可用)
這篇文章主要介紹了vue+element加入簽名效果(移動(dòng)端),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06