<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Vue Router history模式的配置方法及其原理

        來源:懂視網(wǎng) 責編:小采 時間:2020-11-27 21:55:53
        文檔

        Vue Router history模式的配置方法及其原理

        Vue Router history模式的配置方法及其原理:vue-router分為 hash和 history模式,前者為其默認模式,url的表現(xiàn)形式為 http://yoursite.com#home,比較難看。后者的url表現(xiàn)形式為 http://yoursite.com/home,比較美觀。 但如果要使用 history模式,我們需要在后端進行額外配置。本文將討論如何
        推薦度:
        導讀Vue Router history模式的配置方法及其原理:vue-router分為 hash和 history模式,前者為其默認模式,url的表現(xiàn)形式為 http://yoursite.com#home,比較難看。后者的url表現(xiàn)形式為 http://yoursite.com/home,比較美觀。 但如果要使用 history模式,我們需要在后端進行額外配置。本文將討論如何

        vue-router分為 hashhistory模式,前者為其默認模式,url的表現(xiàn)形式為 http://yoursite.com#home,比較難看。后者的url表現(xiàn)形式為 http://yoursite.com/home,比較美觀。

        但如果要使用 history模式,我們需要在后端進行額外配置。本文將討論如何配置以及為什么要這樣配置。

        history模式的配置方法

        我們來看看官方文檔是教我們怎么配置的:HTML5 History 模式。

        首先要將 mode設置為 history

        const router = new VueRouter({
         mode: 'history',
         routes: [...]
        })

        然后設置后端(這里采用的nginx):

        location / {
         try_files $uri $uri/ /index.html;
        }

        然后就......沒了!顯然官方的教程講的比較簡略,并且我們參照這個教程實際上還是會遇到一些問題。

        history模式的配置實踐及原理

        強烈建議:閱讀這部分之前,先看一下nginx的這部分文檔和 這部分文檔。

        既然官方文檔教我們這樣做了,我們就按照它說的來實踐一下。

        只配置前端的情況

        首先,我們將 mode設置為 history,但不配置后端。然后,假如我們的路由是長這個樣子的:

        const routes = [
         {path: '/home', component: Home},
         {path: '/', redirect: '/home'}
        ];

        我們用nginx部署項目,然后在地址欄輸入 http://localhost:8080(這里配置的端口是8080),你會發(fā)現(xiàn)地址欄之后會變?yōu)?http://localhost:8080/home,并且 看起來一切正常, 似乎路由也可以正常切換而不會發(fā)生其他問題(實際上會發(fā)生問題,后面會進行討論)??雌饋砗孟癫恍枰垂倬W(wǎng)告訴我們的那樣配置后端也能實現(xiàn) history模式,但如果你直接在地址欄輸入 http://localhost:8080/home,你會發(fā)現(xiàn)你獲得了一個404頁面。

        那么 http://localhost:8080為什么可以(部分)正常顯示呢?道理其實很簡單,你訪問 http://localhost:8080時,靜態(tài)服務器(這里是nginx)會默認去目標目錄(這里為 locationroot所指定的目錄)下尋找 index.html(這是nginx在端口后沒有額外路徑時的默認行為),目標目錄下有這個文件嗎?有!然后靜態(tài)服務器返回給你這個文件,配合 vue-router進行轉(zhuǎn)發(fā),自然可以(部分)正常顯示。

        但如果直接訪問 http://localhost:8080/home,靜態(tài)服務器會去目標目錄下尋找 home文件,目標目錄下有這個文件嗎?沒有!所以自然就404了。

        配置后端

        為了達到直接訪問 http://localhost:8080/home也可以成功的目的,我們需要對后端(這里即nginx)進行一些配置。

        首先想想,要怎樣才能達到這個目的呢?

        在傳統(tǒng)的 hash模式中( http://localhost:8080#home),即使不需要配置,靜態(tài)服務器始終會去尋找 index.html并返回給我們,然后 vue-router會獲取 #后面的字符作為參數(shù),對前端頁面進行變換。

        類比一下,在 history模式中,我們所想要的情況就是:輸入 http://localhost:8080/home,但最終返回的也是 index.html,然后 vue-router會獲取 home作為參數(shù),對前端頁面進行變換。那么在nginx中,誰能做到這件事呢?答案就是 try_files

        首先看一下try_files的語法: try_files file ... uri;

        然后看一下官方文檔對它的介紹:

        Checks the existence of files in the specified order and uses the first found file for request processing; the processing is performed in the current context. The path to a file is constructed from the file parameter according to the root and alias directives. It is possible to check directory's existence by specifying a slash at the end of a name, e.g. “$uri/”. If none of the files were found, an internal redirect to the uri specified in the last parameter is made.
        

        大意就是它會按照 try_files后面的參數(shù)依次去匹配 root中對應的文件或文件夾。如果匹配到的是一個文件,那么將返回這個文件;如果匹配到的是一個文件夾,那么將返回這個文件夾中 index指令指定的文件。最后一個 uri參數(shù)將作為前面沒有匹配到的fallback。(注意 try_files指令至少需要兩個參數(shù))

        拿我自己的網(wǎng)站舉個例子:

        location / { 
         root /data/www/rf-blog-web; 
         index index.html; 
         try_files $uri $uri/ /index.html; 
        }

        $uri是nginx中的變量,比如我訪問的網(wǎng)址是 http://localhost:8080/home,那么它就代表的 /home。

        rf-blog-web這個目錄中,沒有子目錄,只有一個 index.html和一些壓縮后的名稱是hash值的.js文件。當我們請求 http://localhost:8080/home這個地址時,首先查找有無 home這個文件,沒有;再查找有無 home目錄,也沒有。所以最終會定位到第三個參數(shù)從而返回 index.html,按照這個規(guī)則,所有路由里的url路徑最后都會定位到 index.html。 vue-router再獲取參數(shù)進行前端頁面的變換,至此,我們已經(jīng)可以通過 http://localhost:8080/home這個地址進行成功地訪問了。

        $uri這個參數(shù)的作用其實是匹配那些.js文件用的,而 $uri/在這個例子中并沒有多大用,實際上是可以去掉的。

        history模式下可能會遇到的問題及解決方案

        在將我的項目(在路由中用了懶加載)改為 history模式的過程中,有時候發(fā)現(xiàn)會出現(xiàn)chunk加載出錯的情況,打開chrome的network發(fā)現(xiàn)那個chunk加載404了,是因為請求的url中多了一層路徑。我在這里發(fā)現(xiàn)了解決方案。

        LinusBorg說,因為在 history模式中切換路由時,我們是真正改變了頁面的url路徑,所以webpack的runtime會認為它位于 example.com/some/path。如果 publicPath是設置的相對路徑,那么webpack加載chunk時可能會變成 example.com/some/path/static/js/3.js這樣的路徑,然而chunk的真正路徑是 example.com/static/js/3.js,所以我們需要將 publicPath設置為絕對路徑( publicPath: '/')來解決這個問題。

        總結(jié)

        以上所述是小編給大家介紹的Vue Router history模式的配置方法及其原理,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Vue Router history模式的配置方法及其原理

        Vue Router history模式的配置方法及其原理:vue-router分為 hash和 history模式,前者為其默認模式,url的表現(xiàn)形式為 http://yoursite.com#home,比較難看。后者的url表現(xiàn)形式為 http://yoursite.com/home,比較美觀。 但如果要使用 history模式,我們需要在后端進行額外配置。本文將討論如何
        推薦度:
        標簽: 原理 VUE 配置的
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 91精品国产免费久久久久久青草| 成人爽a毛片免费| 成人在线视频免费| 亚洲人成7777| 日韩欧美一区二区三区免费观看| 久久精品国产亚洲av麻豆蜜芽 | 在线免费观看伊人三级电影| 久久精品亚洲乱码伦伦中文| 黄色视频在线免费观看| 亚洲线精品一区二区三区| 成人电影在线免费观看| 久久久久亚洲AV无码麻豆| 国产精品怡红院永久免费| 久久精品国产亚洲αv忘忧草| 免费看片A级毛片免费看| 最新亚洲人成无码网站| 中文字幕亚洲一区二区三区| 国产自国产自愉自愉免费24区 | 亚洲香蕉免费有线视频| 亚洲Av高清一区二区三区| 色吊丝永久在线观看最新免费| 真正全免费视频a毛片| 国产成人高清亚洲| 免费A级毛片无码A∨中文字幕下载| 亚洲另类自拍丝袜第1页| 啦啦啦手机完整免费高清观看| 日本特黄特色AAA大片免费| 国产亚洲美女精品久久久久狼| 2019中文字幕在线电影免费| 在线亚洲午夜片AV大片| 精品国产亚洲男女在线线电影 | 久久亚洲高清观看| 国产精彩免费视频| 亚洲av永久无码一区二区三区| 亚洲午夜福利717| 91嫩草国产在线观看免费| 九九免费精品视频在这里| 久久亚洲中文字幕精品有坂深雪 | 亚洲综合激情另类专区| 2021在线永久免费视频| 日亚毛片免费乱码不卡一区|