VUE是當(dāng)下最火爆的前端框架之一,vue-router是vue項目中幾乎都會用到的組件,然而體驗一時爽,其實坑不少。本篇經(jīng)驗將詳細(xì)介紹vue-router的兩種mode效果和開發(fā)測試環(huán)境下的問題,并給出解決方案。
vue-router的HTML5 History 模式,這種模式充分利用 history.pushState API 來完成 URL 跳轉(zhuǎn)而無須重新加載頁面。
const router = new VueRouter({ mode: 'history', routes: [...] })
當(dāng)你使用 history 模式時,URL 就像正常的 url,例如 http://yoursite.com/user/id, 就是長這樣的!
不過這種模式要玩好,還需要后臺配置支持。因為我們的應(yīng)用是個單頁客戶端應(yīng)用,如果后臺沒有正確的配置,當(dāng)用戶在瀏覽器直接訪問 http://oursite.com/user/id 就會返回 404,這就尷尬了。
所以,你要在服務(wù)端增加一個覆蓋所有情況的候選資源:如果 URL 匹配不到任何靜態(tài)資源,則應(yīng)該返回同一個 index.html 頁面,這個頁面就是你 app 依賴的頁面。
目前后端服務(wù)器有Apache、nginx、原生 Node.js、基于 Node.js 的 Express、Internet Information Services (IIS)、Caddy、Firebase 主機等。
先給一個官方標(biāo)準(zhǔn)版配置的傳送門,請戳這里→ https://router.vuejs.org/zh/guide/essentials/history-mode.html
既然是官方給出的配置,那肯定就會說的很官方咯~
按照官方給出的示例,將道理是成功的,但是官方給出的只局限于這個項目在服務(wù)器的根目錄下!
如果你的項目沒有放在根目錄下,那么就是這么的不講道理。
下面是在實際開發(fā)中碰到的問題。
我們的后端服務(wù)器是nginx,所以按照官方的給出的配置,找到nginx.conf,照抄代碼,修改完后重啟服務(wù)器,講道理是成功的。
server { listen 80; server_name oursite.com; location /test/ { alias /usr/local/test/; index index.htm index.html; #上面的就是一些常規(guī)配置,下面這個才是重點 try_files $uri $uri/ /index.html; #這里沒有采用官方給出處理404錯誤頁面的方案 #方案一(把所有沒有后綴名的請求如果404都跳轉(zhuǎn)到index.html,我們沒有采用) #error_page 404 /test/index.html; #方案二(404的方式,不是特別完美。會有瀏覽器留下404的狀態(tài)(容易被第三方劫持),以下方式可以避免被第三方劫持?。? if (!-e $request_filename) { rewrite ^/(.*) /test/index.html last; break; } } }
但是,事實就是這么的不講道理,我們并沒有成功!這就令人很是郁悶了,心中一萬只神獸羊駝,奔騰而過~ 為什么沒有成功呢,都是按部就班做的呀,完全不講道理!
而真相只有一個,那就是~~~
路由文件中的路徑有問題
const router = new VueRouter({ mode: 'history', routes: [ { path: '/test/', component: YourComponent }, { path: '/test/a', component: YourComponent }, { path: '/test/b:x', component: YourComponent } ] })
在路由文件中所有的路徑前面加上服務(wù)器下項目所在的文件名即可,當(dāng)然也包括<router-link>和this.$router.push()中的路徑,不然又是不講道理的。
這只是在nginx服務(wù)器下的一種解決方案,至于別的服務(wù)器應(yīng)該也是同理的。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com