亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

Vue 3.x+axios跨域方案的踩坑指南

2019-11-19 11:13:56
字體:
來源:轉載
供稿:網友

緣起

最近實驗課上需要重構以前寫過的一個項目(垃圾堆),需要添加發生郵件提醒的功能,記得以前寫過一個PHP版的實現,所以想把PHP寫的功能整理成一個服務,然后在前端調用。但是這個項目是JavaWeb,也就是說我需要面對跨域的問題。不過本篇文章,講的并不是如何解決這樣的跨域問題,而是我在找如何解決這個問題的路上遇到的坑。

其實,在前端工程化大行其道的現在,前后端已經分離開來,前端為了提高工作流效率往往自己開一個小型的服務器,就比如webpack.devServer。這樣在前端調用后端接口的時候必然會面臨跨域的問題,

如題,Vue3.x + axios 跨域方案 就是解決這里的跨域問題。這里的跨域是基于webpack的devServer的代理功能(proxy)來實現開發環境中的跨域,也就是說本篇所討論的并不能解決生產環境下的跨域問題,因為webpack.devServer是DevDependencies,一旦打包上線,這個proxy代理就會失效。但是這并不妨礙我們開發中使用跨域來提高開發效率和體驗。

開始填坑

其實這個問題解決起來很簡單,網上也是很多教程,為了文章完整性,我這里也做一個盡量完備的展示,介紹如何配置Vue3.x來實現跨域 。

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

Vue3.x的CLI工具比Vue2.x的CLI工具構建的項目要簡化很多,根目錄下只有./src和./public文件夾,所以網上很多教程說config目錄下的vue.config.js是說的vue2.x版本。那么對于Vue3.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轉發了這個請求到一個新的地址。

后續

本篇只解決了開發環境下的跨域問題,實際線上還不能跨域,目前這里有一些方案:

  • Nginx反向代理跨域
  • JSONP
  • CORS

下一次討論這個跨域問題,嘗試解決。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩中文字幕视频在线观看| 日韩av最新在线观看| 久久伊人色综合| 成人久久精品视频| 国产精品中文字幕久久久| 亚洲国模精品一区| 久久九九精品99国产精品| 久久久国产精品亚洲一区| 久久精品人人爽| 日本久久久久亚洲中字幕| 欧美性生交大片免费| 国模精品视频一区二区三区| 中文字幕v亚洲ⅴv天堂| 日本三级久久久| 国产一区二区三区久久精品| 日韩电影免费观看在线观看| 国语自产精品视频在线看一大j8| 丝袜亚洲另类欧美重口| 91大神福利视频在线| 亚洲激情自拍图| 国产日韩精品在线观看| 色777狠狠综合秋免鲁丝| 色狠狠av一区二区三区香蕉蜜桃| 亚洲电影免费观看高清| 国产精品三级在线| 欧美日韩激情美女| 欧美激情亚洲综合一区| 欧美性在线视频| 国产福利精品av综合导导航| 日韩男女性生活视频| 欧美香蕉大胸在线视频观看| 日韩av免费在线看| 欧美日韩美女在线观看| 欧美一级在线播放| 日韩中文字幕免费看| 久久久久亚洲精品成人网小说| 国产精品自拍视频| 亚洲欧美精品中文字幕在线| 欧美一级淫片丝袜脚交| 国产精品永久免费视频| 美女久久久久久久| 超在线视频97| 久久精品国产久精国产一老狼| 中文字幕欧美视频在线| 亚洲韩国欧洲国产日产av| 欧美成人国产va精品日本一级| 91久久国产婷婷一区二区| 国自产精品手机在线观看视频| 日韩小视频网址| 精品久久久一区二区| 91天堂在线观看| 亚洲国产精彩中文乱码av| 精品国产乱码久久久久酒店| 深夜精品寂寞黄网站在线观看| 亚洲激情视频网站| 欧美极度另类性三渗透| 中文字幕视频在线免费欧美日韩综合在线看| 中文字幕亚洲激情| 亚洲人成网站免费播放| 亚洲大胆美女视频| 日韩免费av一区二区| 91在线中文字幕| 欧美一区二区三区免费观看| 在线中文字幕日韩| 欧美激情免费观看| 伊人久久久久久久久久| 国产精品亚洲精品| 国产精品福利无圣光在线一区| 狠狠躁夜夜躁人人爽超碰91| 国产精品jvid在线观看蜜臀| 8090成年在线看片午夜| 日韩精品在线免费播放| 国产精品视频自拍| 日韩高清电影好看的电视剧电影| 韩日精品中文字幕| 欧美日韩精品在线观看| 久久久久中文字幕| 久久成年人免费电影| 欧美精品在线观看| 欧美大胆a视频| 欧美一区二区三区免费视| 国产日韩欧美电影在线观看| 97视频免费在线看| 久久精品免费电影| 国产主播在线一区| 国产精品日韩欧美大师| 久久夜色精品亚洲噜噜国产mv| 亚洲色图17p| 久久久亚洲福利精品午夜| 国产成人av网址| 亚洲精品第一国产综合精品| 亚洲性日韩精品一区二区| 欧美日韩黄色大片| 日韩精品中文字幕有码专区| 亚洲成人亚洲激情| 欧美成人剧情片在线观看| 亚洲女人被黑人巨大进入al| 日本韩国欧美精品大片卡二| 国产成人精品av| 亚洲成年人在线| 91精品国产免费久久久久久| 自拍亚洲一区欧美另类| 国产九九精品视频| 精品免费在线观看| 在线亚洲欧美视频| 日韩成人av网址| 久久99视频免费| 久久久久久久久国产| 久久久亚洲影院| 亚洲天堂第一页| 78色国产精品| 亚洲国产成人精品女人久久久| 欧美日韩亚洲高清| 成人妇女免费播放久久久| 热久久99这里有精品| 亚洲aⅴ男人的天堂在线观看| 国产欧美精品日韩精品| 狠狠干狠狠久久| 成人av在线网址| 国产视频一区在线| 91免费看视频.| 最好看的2019的中文字幕视频| 97视频在线观看免费| 亚洲香蕉成人av网站在线观看| 国产91精品视频在线观看| 亚洲网站在线看| 高清一区二区三区日本久| 亚洲18私人小影院| 亚洲91av视频| 欧美在线视频在线播放完整版免费观看| 久久久久久久97| 亚洲精品美女免费| 国产精品揄拍500视频| 亚洲日本成人女熟在线观看| 91精品国产91久久久| 欧美大片免费观看在线观看网站推荐| 国内精品视频一区| 欧美激情一区二区三级高清视频| 亚洲欧洲中文天堂| 青青草原成人在线视频| 成人免费在线视频网址| 欧美美女操人视频| 成人国产精品日本在线| 久久久免费观看视频| 欧美激情一二区| 91精品在线影院| 日韩中文字幕精品视频| 国产精品美女久久| 欧美性开放视频| 欧美午夜丰满在线18影院| 成人www视频在线观看| 欧美极品少妇全裸体| 国产精品视频一区二区高潮| 亚洲精品国产综合区久久久久久久| 亚洲电影av在线| 精品久久香蕉国产线看观看亚洲| 亚洲电影在线看| www.色综合| 日本精品久久久| 欧美大片在线看| 久久精品国产99国产精品澳门| 久久久久久亚洲| 国产亚洲欧洲黄色| 欧美尤物巨大精品爽|