vue-router history模式服務器端配置過程記錄
history路由
history模式是指使用HTML5的historyAPI實現客戶端路由的模式,它的典型表現就是去除瞭hash模式中url路徑中的#。在使用Vue-Router時開啟history模式非常容易,隻需要在實例化路由時傳入mode:’history’配置項即可,但缺少服務端支持時,基於historyAPI的路由無法從url地址欄直接訪問指定頁面,這個很容易理解,因為url地址欄裡輸入後回車相當於發送瞭一次GET請求,那麼不帶#的路由路徑就和普通的API接口是一樣的,既然服務端並沒有定義這樣的接口,那直接訪問時出現404頁面就很正常瞭。
官方示例
官方提供瞭很多處理這種場景的方式,以node.js版本的處理方案為例:
const http = require('http') const fs = require('fs') const httpPort = 80 http.createServer((req, res) => { fs.readFile('index.htm', 'utf-8', (err, content) => { if (err) { console.log('We cannot open "index.htm" file.') } res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }) res.end(content) }) }).listen(httpPort, () => { console.log('Server listening on: http://localhost:%s', httpPort) })
不難看出,它的處理思路就是所有請求都強制重定向到首頁,相當於服務端屏蔽瞭訪問資源不存在的情況,而將路由的工作留給客戶端自己去處理,這樣啟用瞭history模式的前端路由在直接定位到子頁面時就不會報錯瞭。
vue-router history模式配置
vue-router的history模式需要將路由配置中的mode設置成history,同時還需要在服務器端進行相應的配置。
與hash模式相比,在history模式下,頁面的url中會少一些如#這樣的符號:
hash:www.example.com/#/login
history:www.example.com/login
單頁應用程序中,在history模式下瀏覽器會向服務器請求這個頁面,但是服務器端並不存在這個頁面於是就返回404。所以這個時候就需要給服務器端進行配置:除瞭靜態資源以外都需要返回單頁應用的index.html。
服務器配置——nodejs
在nodejs服務器中需要引入connect-history-api-fallback這個模塊來處理history模式,並在使用處理靜態資源的中間件前使用這個模塊:
const path = require('path') // 導入處理history模式的模塊 const history = require('connect-history-api-fallback') const express = require('express') const app = express() // 註冊處理history模式的中間件 app.use(history()) // 處理靜態資源的中間件 app.use(express.static(path.join(__dirname, './web'))) app.listen(3000, () => { console.log('service started at port 3000') })
服務器配置——nginx
先將打包後的文件放入html文件夾下,再打開conf文件夾下nginx.conf文件,修改如下配置:
http { # ...other config server { # ...other config location / { root html; index index.html index.htm; try_files $uri $uri/ /index.html; } } }
總結
到此這篇關於vue-router history模式服務器端配置的文章就介紹到這瞭,更多相關vue-router history模式配置內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- nodeJS express路由學習req.body與req.query方法實例詳解
- vue-router如何實現history模式配置
- Nginx解決history模式下頁面刷新404問題示例
- Nginx報404錯誤的詳細解決方法
- vue終極性能優化方案(解決首頁加載慢問題)