天天看點

Vue之Axios跨域問題解決方案

背景:因為axios中隻能使用get和post方法來進行請求資料,沒有提供jsonp等方法進行跨域通路資料

          axios中文網址:https://www.kancloud.cn/yunye/axios/234845

Vue之Axios跨域問題解決方案

方案1:既然使用axios直接進行跨域通路不可行,我們就需要配置代理了。代理可以解決的原因:因為用戶端請求服務端的資料是存在跨域問題的,而伺服器和伺服器之間可以互相請求資料,是沒有跨域的概念(如果伺服器沒有設定禁止跨域的權限問題),也就是說,我們可以配置一個代理的伺服器可以請求另一個伺服器中的資料,然後把請求出來的資料傳回到我們的代理伺服器中,代理伺服器再傳回資料給我們的用戶端,這樣我們就可以實作跨域通路資料。

準備工作:安裝所需中間件和插件等,比如axios,http-proxy-middleware等。

具體案例:這裡以通路豆瓣Top250為例,直接通路如下:

Vue之Axios跨域問題解決方案

事實證明直接請求确實出現跨域問題了,下面具體示範解決跨域問題的步驟:

上面所說的必備條件都已安裝完成的情況下,執行以下步驟即可解決問題:

1.配置BaseUrl

在main.js中,配置資料所在伺服器的字首(即固定部分),代碼如下:

Vue之Axios跨域問題解決方案

關鍵代碼:axios.defaults.baseURL = '/api',作用是我們每次發送的請求都會帶一個/api的字首。

2.配置代理

在config檔案夾下的index.js檔案中的proxyTable字段中,作如下處理:

Vue之Axios跨域問題解決方案

3.在具體使用axios的地方,修改url如下即可:

Vue之Axios跨域問題解決方案

 4.重新啟動項目之後,已經解決了跨域問題,結果如下:

Vue之Axios跨域問題解決方案

原理:

因為我們給url加上了字首/api,我們通路/movie/top250就當于通路了:localhost:8080/api/movie/top250(其中localhost:8080是預設的IP和端口)。

在index.js中的proxyTable中攔截了/api,并把/api及其前面的所有替換成了target中的内容,是以實際通路Url是http://api.douban.com/v2/movie/top250。

至此,純前端配置代了解決axios跨域得到解決。

方案2:後端處理跨域問題,加個過濾器即可解決,如下:

Vue之Axios跨域問題解決方案
Vue之Axios跨域問題解決方案

以上axios解決跨域的方案,希望能解決大家遇到的跨域問題,如有問題請添加評論。

-------------------------------------------------------------------------分割線-------------------------------------------------------------------------------------

根據評論區内容,區分一下生産環境和開發環境,集體配置如下:

1.在config檔案夾裡面建立一個api.config.js的配置檔案

Vue之Axios跨域問題解決方案
Vue之Axios跨域問題解決方案

轉自https://blog.csdn.net/wh_xmy/article/details/87705840