中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue-cli3.x+axios如何實現跨域

發布時間:2021-08-20 11:28:23 來源:億速云 閱讀:155 作者:小新 欄目:web開發

這篇文章給大家分享的是有關Vue-cli3.x+axios如何實現跨域的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

vue.config.js中devServer.proxy的配置解析

Vue-cli3.x比Vue-cli2.x構建的項目要簡化很多,根目錄下只有./src和./public文件夾,所以網上很多教程說config目錄下的vue.config.js是說的vue-cli 2.x版本。那么對于Vue-cli 3.x版本,構建也很簡單,直接在根目錄里建一個vue.config.js配置文件就可以了,我們直接看devServer.proxy里的代碼:

我這里devServer的地址是:localhost:8080/,需要代理的地址是:localhost/index/phpinfo.php (我自己寫的一個測試跨域用的php,返回一個‘ok')

下面是根據上面的地址需要配置的proxy對象

devServer : {
    proxy : {
      '/index' : {
        target : 'http://localhost/index',
        // ws : true,
        changeOrigin : true,
        pathRewrite : {
          '^/index' : ''
        }
      }
    }
  }

大部分教程到這里就停止了,但是我在這里做一個擴展,為了讓讀者理解這里的配置是如何起作用的(以下內容整理自http-proxy-middleware的npm描述里,http-proxy-middleware是一個npm模塊,是proxy的底層原理實現)。

 foo://example.com:8042/over/there?name=ferret#nose
     \_/  \______________/\_________/ \_________/ \__/
     |      |      |      |    |
    scheme   authority    path    query  fragment

以我上面的配置為例,'/index'這個key在http-proxy-middleware中被稱為context——用來決定哪些請求需要被target對應的主機地址(這里是http://localhost/index)代理,它可以是 字符串,含有通配符的字符串,或是一個數組,分別對應于path matching(路徑匹配)wildcard path matching(通配符路徑匹配)multiple path matching(多路徑匹配),而這里的path指的就是上圖所標識的path段。

簡言之,這個key就是匹配path的,一旦匹配到符合的path,就會把請求轉發的代理主機去,而代理主機的地址就是target字段對應的內容。

那pathRewrit是什么意思呢?意如其名,路徑重寫。就是把模式(這里是^/index)匹配到的path重寫為對應的路徑(這里是'',相當于刪除了這個匹配到的路徑)。除了刪除,還有在原有路徑上添加一個基礎路徑,或是改寫一個路徑的方式,這可以參考http-proxy-middleware的npm描述的option.pathRewrite章節 。

在Vue中使用axios

這個使用任意一個ajax封裝的庫都是可行的,axios,jquery.ajax或者是vue-resource都是可以的。

在Vue中使用axios,網上有兩種方法,一種是將axios加入Vue的原型里,我更推薦第二種方法:

npm install axios vue-axios
import axios from 'axios';
import VueAxios from 'vue-axios';
Vue.use(VueAxios,axios);

以我上面的proxy配置為基礎,想要讓代理成功轉發到localhost/index/phpinfo.php,在Vue實例中axios需要這樣寫訪問地址:

this.axios.get('/index/phpinfo.php').then((res)=>{
    console.log(res);
   })

我們來分析這些代碼整個發揮作用的原理是什么?首先,axios去訪問/index/phpinfo.php,這是個相對地址,所以真實訪問地址其實是localhost:8080/index/phpinfo.php,然而/index/phpinfo.php被我們配置的/index匹配到了 ,所以訪問被proxy代理,那轉發到哪個路徑呢?在pathRewrite中,我們將模式^/index的路徑清除了,所以最終的訪問路徑是 target+pathRewrite+ 剩余的部分 , 這樣也就是 http://localhost/index++/phpinfo.php

坑點

可能出現即使配置了proxy,但是依然沒有任何卵用。

  • 大部分情況是因為你的proxy配置和你的訪問路徑不匹配,或者即使匹配到了,但是轉發出去的地址不對,沒有命中后端給的API

  • 或者看看axios,有沒有使用正確姿勢?

  • 還有一點,或許你看到返回的response里的url依然顯示的是本地主機,但是數據已經正常返回,這是正常的,因為我們訪問的本來就是本地主機,只不過proxy轉發了這個請求到一個新的地址。

感謝各位的閱讀!關于“Vue-cli3.x+axios如何實現跨域”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

天长市| 诏安县| 宜宾市| 公安县| 玉门市| 临颍县| 黑山县| 阳曲县| 加查县| 利津县| 黑水县| 四子王旗| 韶关市| 湾仔区| 安远县| 延川县| 唐山市| 顺昌县| 竹山县| 巴东县| 南川市| 甘孜县| 镇远县| 弥勒县| 眉山市| 桂东县| 繁昌县| 大田县| 巴林左旗| 克山县| 正镶白旗| SHOW| 德钦县| 胶州市| 桦甸市| 图木舒克市| 镇安县| 东阳市| 渝北区| 金山区| 上思县|