Vue-cli3.x+axios如何實(shí)現(xiàn)跨域-創(chuàng)新互聯(lián)

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

在通道等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需規(guī)劃網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,成都全網(wǎng)營(yíng)銷推廣,外貿(mào)營(yíng)銷網(wǎng)站建設(shè),通道網(wǎng)站建設(shè)費(fèi)用合理。

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

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

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

下面是根據(jù)上面的地址需要配置的proxy對(duì)象

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

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

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

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

簡(jiǎn)言之,這個(gè)key就是匹配path的,一旦匹配到符合的path,就會(huì)把請(qǐng)求轉(zhuǎn)發(fā)的代理主機(jī)去,而代理主機(jī)的地址就是target字段對(duì)應(yīng)的內(nèi)容。

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

在Vue中使用axios

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

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

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

以我上面的proxy配置為基礎(chǔ),想要讓代理成功轉(zhuǎn)發(fā)到localhost/index/phpinfo.php,在Vue實(shí)例中axios需要這樣寫訪問地址:

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

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

坑點(diǎn)

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

  • 大部分情況是因?yàn)槟愕膒roxy配置和你的訪問路徑不匹配,或者即使匹配到了,但是轉(zhuǎn)發(fā)出去的地址不對(duì),沒有命中后端給的API

  • 或者看看axios,有沒有使用正確姿勢(shì)?

  • 還有一點(diǎn),或許你看到返回的response里的url依然顯示的是本地主機(jī),但是數(shù)據(jù)已經(jīng)正常返回,這是正常的,因?yàn)槲覀冊(cè)L問的本來就是本地主機(jī),只不過proxy轉(zhuǎn)發(fā)了這個(gè)請(qǐng)求到一個(gè)新的地址。

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

網(wǎng)頁題目:Vue-cli3.x+axios如何實(shí)現(xiàn)跨域-創(chuàng)新互聯(lián)
網(wǎng)頁網(wǎng)址:http://muchs.cn/article42/dhojec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、網(wǎng)站設(shè)計(jì)公司ChatGPT、定制開發(fā)、品牌網(wǎng)站設(shè)計(jì)、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司