vue-router先hash模式部署專案,然後開啟histroy模式 ,引發的幾個問題以及histroy模式的開啟方式、優點

OBKoro1發表於2017-12-25

前言:

vue路由有一個HTML5 History 模式,這個模式要在路由裡面另外開啟的,很多人在剛使用路由的時候之前不知道這個模式,所以並沒有啟用,然後就把專案部署上去了,因為這個模式還是有挺多優點的,最後還是會開啟這個模式。

然而因為之前使用hash模式再改為histroy模式還是有些問題的,我已經踩過坑了,然後把這幾個問題寫出來。有需要的朋友可以做一下參考,喜歡的可以點波贊,或者關注一下,希望可以幫到大家。

本文首發於我的個人blog:obkoro1.com

開啟history模式:

如果不開啟的話,路由預設是hash模式,開啟這個模式前端的工作也很簡單,如下:

    mode: 'history' //在路由那裡配置一下這個
複製程式碼

最後需要後端的做一些配置配合,這裡可以參考一下文件給的栗子

history模式的優點:

  1. url變成真正的url,url看上去更好看。

     http://yoursite.com/#/a/b  //hash模式
     http://yoursite.com/a/b  //history模式
    複製程式碼
  2. 可以使用vue-router的滾動行為,這個用來記憶進入其他頁面之前的位置非常好用,配置一下就可以直接使用了,前提是開啟histroy模式。

    vue-router先hash模式部署專案,然後開啟histroy模式 ,引發的幾個問題以及histroy模式的開啟方式、優點

  3. 類似專案引入微信js-sdk的時候,一些操作是對url是有要求,url不能帶上'#',如果沒有開啟histroy模式,很可能會導致問題。

  4. 像vue-cli的配置,都是以路由開啟history模式的標準來配置的(下面會講到一個栗子),沒有開啟的話,自己要另外配置。

先hash模式,後histroy模式

就像開頭說的,這裡的問題指的是:先用hash模式部署專案到線上,然後再開啟histroy模式,由此引發的一些問題。

1.找不到資源問題:

在hash模式下面,直接打包的話,會導致找不到css、js和圖片資源,然後經過百度之後,做出瞭如下截圖的配置操作,更改assetsPublicPath:'/'assetsPublicPath:'./'

vue-router先hash模式部署專案,然後開啟histroy模式 ,引發的幾個問題以及histroy模式的開啟方式、優點

在hash模式下,像上面那麼配置就沒有問題了。當時我還以為vue-cli配置有問題,實際上,人家才沒有問題呢,是我們自己沒有開啟history模式的問題。

然後開啟了histroy模式之後,因為我們之前更改了assetsPublicPath屬性,所以要把那個.給去掉,改回來:assetsPublicPath:'/'

2.請求帶上路由,導致請求失敗

正確的請求是:

    http:www.xxx.com/api/介面 //api是我通過proxyTable轉發地址的代理名字
複製程式碼

開啟histroy模式之後:

在二層的路由裡面會出現這種情況:

    路由是:http:www.xxx.com/a/b
    http:www.xxx.com/api/a/介面 //這就導致了請求失敗,要把a也去掉才是正確的
複製程式碼

解決方式是:

因為我用的是axios,所以可以在全域性請求中設定一個baseURL,這個baseURL就是專案的網站地址(http:www.xxx.com),然後二層的路由也會自動去掉前面的a和b。

3.cookie問題

這個實際上不是個問題,完全是自己作的,我把專案分為兩層。所以從a登入,b那邊重新整理就會出現沒有cookie的情況

    兩層路由
    http://yoursite.com/a
    http://yoursite.com/b
複製程式碼

這裡是因為cookie能否拿到跟儲存的路由位置是有關的,之前使用hash模式因為hash模式的urlhttp://yoursite.com/#/a/b,會統一存在http://yoursite.com下面。

而history模式cookie就會存在http://yoursite.com/a或者http://yoursite.com/b下面,另外一邊就會沒有cookiie。

解決辦法:

  1. 不要分為兩層,統一所有的路由都在一個路由地址下面。

  2. 在專案的路由的根地址path:'/'裡面存cookie。

  3. 使用sessionStorage存資訊,我就是用這個方法,使用方法

    sessionStorage只要在http://yoursite.com都可以訪問的到,不管是存在a上面還是b上面。

後話

以上就是本文的所有內容,建議專案一開始還是直接跟後端說一下,開啟histroy模式,省得後面的種種坑。上面的內容都是本人親自踩坑之後的血淚教訓,希望可以幫助到需要的朋友,最後Merry Christmas。

最後:如需轉載,請放上原文連結並署名。碼字不易,感謝支援!本人寫文章本著交流記錄的心態,寫的不好之處,不撕逼,但是歡迎指點。然後就是希望看完的朋友點個喜歡,也可以關注一下我。 個人blog and 掘金個人主頁

以上2017.12.25

相關文章