1. 程式人生 > >vue專案4rs vue-router上線後history模式遇到的坑

vue專案4rs vue-router上線後history模式遇到的坑

  此次專案開發完後準備打包,因為hash模式的路徑帶#看著實在是有點醜,所以採用history模式。因為本次專案屬於以前網站重構,但是seo問題,所以需要以前的一些地址路徑寫,所以vue-router的路徑全部重改了。打包後查了網上一大堆,都說要把config裡的index.js 裡的build裡的assetsPublicPath: '/'改成‘./’,打包上線發現在hash模式下是沒問題的,但一旦改成history模式,有些動態js檔案的路徑都是錯的。無奈之下死馬當活馬醫,把‘./’改回了‘/’在history模式

下再次打包上線,發現點選跳轉頁面都是正常的,有些小激動。但是history模式的通病就是不能重新整理,

因為原來跳轉時其實不是通過請求伺服器的,而是通過js操作history的API改變地址完成的。
當你重新整理了之後瀏覽器就耿直的去請求伺服器了,然而伺服器沒有這個路由,於是就404了。
    解決方法1: 可以做個代理,讓所有訪問伺服器的地址都返回同一個入口檔案。(推薦使用)

    解決方法2: 採用靜態檔案的形式讓每個目錄都存在就不會報錯了

我們伺服器是採用nginx,我不會,沒弄,就自己用了nodejs和express搭建了個簡單伺服器,並採用了官方推薦的中介軟體

connect-history-api-fallback

使用方法:

在伺服器app.js檔案裡引入

var history = require('connect-history-api-fallback');然後在app繫結路由之前繫結中介軟體,app.use(history({ rewrites: [ { from: /^\/wap\/.*$/, to: '/index.html' }//這個是正確方式 ]}));

我一開始

app.use(history({ rewrites: [ { from: /
^\/wap\/.*$/, to: '/' } ]}));

這樣的,發現重新整理是正常的,但是路徑後面總是多了個"/",看著很是奇怪,就試著改成當前下的html檔案,發現真的可以。從此大功告成。