欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue項(xiàng)目如何去掉URL中#符號(hào)的方法

 更新時(shí)間:2022年07月13日 15:06:12   作者:sunliyings17  
在開發(fā)過(guò)程中發(fā)現(xiàn)路徑中帶有/#/的標(biāo)示,而且還去不掉,很丑陋,下面這篇文章主要給大家介紹了vue項(xiàng)目如何去掉URL中#符號(hào)的相關(guān)資料,文中通過(guò)實(shí)例代碼的非常詳細(xì),需要的朋友可以參考下

前言

最近,同事跟我說(shuō),項(xiàng)目的訪問(wèn)路徑里的/#/挺不美觀的,就下手嘗試去掉,本以為就是一句代碼搞定的事情,結(jié)果遇到不少問(wèn)題。

現(xiàn)在把我遇到的情況記錄下來(lái),做個(gè)存檔,如果看到文章的有緣人剛好遇到跟我一樣的情況,我的內(nèi)容能提供多一個(gè)解決方案也是不錯(cuò)的。

正常解決步驟

1. 設(shè)置路由mode

router的默認(rèn)mode為hash模式,關(guān)于hash模式,官方文檔這樣描述:

它在內(nèi)部傳遞的實(shí)際 URL 之前使用了一個(gè)哈希字符(#)。由于這部分 URL 從未被發(fā)送到服務(wù)器,所以它不需要在服務(wù)器層面上進(jìn)行任何特殊處理。不過(guò),它在 SEO 中確實(shí)有不好的影響。如果你擔(dān)心這個(gè)問(wèn)題,可以使用 HTML5 模式。
– -- 《Vue Router官方文檔》

而關(guān)于history模式,官方文檔是這樣說(shuō)的:

當(dāng)使用這種歷史模式時(shí),URL 會(huì)看起來(lái)很 “正常”,例如 https://example.com/user/id。漂亮!

這正符合我們的需求。于是在我們的項(xiàng)目中啟動(dòng)路由mode的history模式:

let Router = new VueRouter({
  mode: 'history',
  routes: [...]
  ...
  });

2. 配置服務(wù)端nginx

關(guān)于history模式,官方文檔還提到:

不過(guò),問(wèn)題來(lái)了。由于我們的應(yīng)用是一個(gè)單頁(yè)的客戶端應(yīng)用,如果沒有適當(dāng)?shù)姆?wù)器配置,用戶在瀏覽器中直接訪問(wèn) https://example.com/user/id,就會(huì)得到一個(gè) 404 錯(cuò)誤。這就丑了。

不用擔(dān)心:要解決這個(gè)問(wèn)題,你需要做的就是在你的服務(wù)器上添加一個(gè)簡(jiǎn)單的回退路由。如果 URL 不匹配任何靜態(tài)資源,它應(yīng)提供與你的應(yīng)用程序中的 index.html 相同的頁(yè)面。漂亮依舊!

按步驟1修改完,部署到服務(wù)器之后,URL中的#確實(shí)沒有了,但是當(dāng)刷新頁(yè)面,或者頁(yè)面中有使用window.open打開的頁(yè)面時(shí),會(huì)出現(xiàn)404錯(cuò)誤。
按官方文檔的說(shuō)明,需要配置服務(wù)器的回退路由,我們的環(huán)境是使用的nginx,使用以下配置解決了刷新404的問(wèn)題

        location / {
                try_files $uri $uri/ @router;
                index  index.html index.htm app.html app.htm;
         }

        location @router {
                rewrite ^.*$ /index.html break;
        }

如果你的環(huán)境是apache或者其他服務(wù)器,可以參考官方文檔進(jìn)行配置

可能碰到的問(wèn)題

1. 靜態(tài)資源Uncaught SyntaxError: Unexpected token < 問(wèn)題

我的項(xiàng)目中有用使用相對(duì)路徑獲取靜態(tài)資源,例如 <img src="./img/xxxx.png" /> 這種方式展示的圖片,這時(shí)候這些圖片都會(huì)拋出 Uncaught SyntaxError: Unexpected token < 404找不到資源的異常,這是由于啟用history模式后相對(duì)路徑造成的問(wèn)題,將 vue.config.js 文件中 publicPath 或者 bashUrl 從./ 相對(duì)路徑修改為 / 絕對(duì)路徑即可

publicPath = '/';

我的項(xiàng)目環(huán)境中 http://localhost:8080/ 后沒有需要添加固定的路徑,如果你的有(比如 http://localhost:8080/domain/),需要按你的情況進(jìn)行調(diào)整

2. api接口請(qǐng)求404問(wèn)題

項(xiàng)目部署之后,我發(fā)現(xiàn)有些接口請(qǐng)求出現(xiàn)了404的情況,檢查發(fā)現(xiàn) api 的axios 配置時(shí)的路徑配置存在相對(duì)路徑的使用,需要進(jìn)行修改
調(diào)整之前的配置:

export const exampleApi = (id) => {
  return request({
    url: 'xxx/xxx/' + id,
    method: 'get',
  })
}

配置修改為:

export const exampleApi = (id) => {
  return request({
    url: '/xxx/xxx/' + id,
    method: 'get',
  })
}

3. 開發(fā)環(huán)境(npm run dev啟動(dòng))刷新404的問(wèn)題

這個(gè)問(wèn)題困擾我不少時(shí)間,網(wǎng)上也沒有找到網(wǎng)友有類似的情況,最后發(fā)現(xiàn)是因?yàn)殚_發(fā)環(huán)境調(diào)試時(shí),為了解決跨域問(wèn)題,在項(xiàng)目中配置了 webpack devServer 的 proxy,代理處理了所有的請(qǐng)求,通過(guò)使用 bypass 繞過(guò)html,就可以解決此問(wèn)題

# vue.config.js文件
devServer: {
    proxy: {
      '/': {
        target: url,
        ...
        bypass: function (req, res, proxyOptions) {
          if (req.headers.accept.indexOf('html') !== -1) {
            console.log('Skipping proxy for browser request.');
            return '/index.html';
          }
        },
      },
  }
}

4. 前端路由與服務(wù)端接口路由沖突問(wèn)題

前面三個(gè)問(wèn)題解決后,本來(lái)以為已經(jīng)全部正常。但是再測(cè)試發(fā)現(xiàn),部分頁(yè)面刷新仍然會(huì)出現(xiàn)問(wèn)題,但是通過(guò)前端的排查未能發(fā)現(xiàn)原因。直到檢查到nginx的配置時(shí),發(fā)現(xiàn)這些出錯(cuò)誤的頁(yè)面的路由,與服務(wù)端的接口路由似乎是重合的!這些前端頁(yè)面的路由被nginx匹配到服務(wù)端的路由,轉(zhuǎn)發(fā)到服務(wù)端去處理,所以發(fā)生異常了!

解決問(wèn)題的思路為,前端程序中給所有的接口添加統(tǒng)一的路由前綴入口,nginx轉(zhuǎn)發(fā)時(shí)匹配這個(gè)統(tǒng)一的前綴即可。

axios.js:

# 設(shè)置bashURL
axios.defaults.baseURL = "/api";

nginx配置文件:

location ^~ /api/ {
      proxy_pass http://pig-gateway:9999/;
      # proxy_set_header Host $http_host;
      proxy_connect_timeout 60s;
      proxy_send_timeout 45s;
      proxy_read_timeout 450s;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }

開發(fā)環(huán)境跨域設(shè)置調(diào)整

vue.config.js:

  devServer: {
  ...
    proxy: {
       ...
      '/api': {
        target: url,
        changeOrigin: true,
        logLevel: 'debug'
      },
    },
     ...
 }

結(jié)尾

至此,我的項(xiàng)目終于在生產(chǎn)環(huán)境以及開發(fā)環(huán)境都運(yùn)行正常了

到此這篇關(guān)于vue項(xiàng)目如何去掉URL中#符號(hào)的文章就介紹到這了,更多相關(guān)vue去掉URL中#內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決Vue axios post請(qǐng)求,后臺(tái)獲取不到數(shù)據(jù)的問(wèn)題方法

    解決Vue axios post請(qǐng)求,后臺(tái)獲取不到數(shù)據(jù)的問(wèn)題方法

    今天小編就為大家分享一篇解決Vue axios post請(qǐng)求,后臺(tái)獲取不到數(shù)據(jù)的問(wèn)題方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • vue中的事件修飾符介紹和示例

    vue中的事件修飾符介紹和示例

    在Vue中,修飾符處理了許多DOM事件的細(xì)節(jié),讓我們不再需要花大量的時(shí)間去處理這些煩惱的事情,而能有更多的精力專注于程序的邏輯處理,需要的朋友可以參考下
    2023-04-04
  • Vue中watch的多種使用方法小結(jié)

    Vue中watch的多種使用方法小結(jié)

    Vue的watch選項(xiàng)提供了多種方法來(lái)觀測(cè)數(shù)據(jù)屬性的變化,讓我們能夠編寫更加優(yōu)雅和維護(hù)性更高的代碼,本文給大家介紹Vue中watch的多種使用方法小結(jié),感興趣的朋友一起看看吧
    2023-10-10
  • vue3中使用ref和emit來(lái)減少props的使用示例詳解

    vue3中使用ref和emit來(lái)減少props的使用示例詳解

    現(xiàn)在在開發(fā)vue3項(xiàng)目的過(guò)程中,我們開發(fā)小組漸漸的減少props的使用,轉(zhuǎn)而用ref 和 emit 來(lái)代替,這篇文章主要介紹了vue3中使用ref和emit來(lái)減少props的使用,需要的朋友可以參考下
    2022-06-06
  • Vue使用electron轉(zhuǎn)換項(xiàng)目成桌面應(yīng)用方法介紹

    Vue使用electron轉(zhuǎn)換項(xiàng)目成桌面應(yīng)用方法介紹

    Electron也可以快速地將你的網(wǎng)站打包成一個(gè)原生應(yīng)用發(fā)布,下面這篇文章主要給大家介紹了關(guān)于Vue和React中快速使用Electron的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • vue實(shí)現(xiàn)前進(jìn)刷新后退不刷新效果

    vue實(shí)現(xiàn)前進(jìn)刷新后退不刷新效果

    這篇文章主要介紹了vue實(shí)現(xiàn)前進(jìn)刷新,后退不刷新效果,即加載過(guò)的界面能緩存起來(lái)(返回不用重新加載),關(guān)閉的界面能被銷毀掉(再進(jìn)入時(shí)重新加載)。本文給大家分享實(shí)現(xiàn)思路,需要的朋友可以參考下
    2018-01-01
  • Vue項(xiàng)目全局配置微信分享思路詳解

    Vue項(xiàng)目全局配置微信分享思路詳解

    這篇文章給大家介紹了vue項(xiàng)目全局配置微信分享思路講解,使用vue作為框架,使用vux作為ui組件庫(kù),具體內(nèi)容詳情大家跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-05-05
  • vue-router相關(guān)基礎(chǔ)知識(shí)及工作原理

    vue-router相關(guān)基礎(chǔ)知識(shí)及工作原理

    這篇文章主要介紹了vue-router相關(guān)基礎(chǔ)知識(shí)及單頁(yè)面應(yīng)用的工作原理,需要的朋友可以參考下
    2018-03-03
  • vue3+vue-cli4中使用svg的方式詳解(親測(cè)可用)

    vue3+vue-cli4中使用svg的方式詳解(親測(cè)可用)

    最近在做個(gè)vue的項(xiàng)目,從各種github上的開源庫(kù)上借鑒開發(fā)方法,給大家分享下,這篇文章主要給大家介紹了關(guān)于vue3+vue-cli4中使用svg的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • vue中添加與刪除關(guān)鍵字搜索功能

    vue中添加與刪除關(guān)鍵字搜索功能

    這篇文章主要介紹了vue中添加與刪除,關(guān)鍵字搜索功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10

最新評(píng)論