1. 程式人生 > >vue中設定跨域,使用axios請求

vue中設定跨域,使用axios請求

在vue的時間開發過程中遇到比較頭疼的事情之一,就是在本地與非本地環境中的介面進行聯調。最常遇見的就是跨域問題,一把的解決方法有三種:

1. 後臺更改header(注:這是後臺的事,我們做不了)

2. 使用JQuery提供的jsonp  (注:只為了使用jsonp而引入Jquery,有點浪費哈)

3. 使用http-proxy-middleware 代理解決(注:專案使用vue-cli腳手架搭建,常用並且好用)

 

這裡我主要記錄的就是第三中方法,步驟如下:

假設需要請求的介面:http://f.apiplus.cn/bj11x5.json

1.  開啟config/index.js,在proxyTable中添寫如下程式碼:

proxyTable: { 
  '/api': {     //使用"/api"來代替"http://f.apiplus.cn" 
    target: 'http://f.apiplus.cn',    //源地址 
    changeOrigin: true,    //改變源 
    pathRewrite: { 
      '^/api': ''     //路徑重寫,也可以寫成 '^/api': 'http://f.apiplus.cn'
      } 
  } 
}

 2、頁面中使用axios請求資料時直接使用 “/api” 代替:

http://f.apiplus.cn

methods: {
    getData () { 
        // /api 代替了伺服器地址 'http://f.apiplus.cn'
        axios.get('/api/bj11x5.json', function (res) { 
           console.log(res) 
    })
}

這樣,就可以完成跨域請求的需要了。在請求時地址只需要寫 '/api/bj11x5.json' 即可,而 '/api' 對應的伺服器地址的解析過程webpack會進行轉發!

 

但是,通過這種方法解決跨域,打包部署時會出問題。原因是因為在生產環境中時並沒有使用 “/api” 代替:

http://f.apiplus.cn

解決方法有兩種:

方法一:定義兩個變數(手動判斷,不依靠webpack進行派發)

解決思路:在開發環境是,該變數 = ‘/api’;在生產環境時,變數 = 'http://f.apiplus.cn' (相等於重寫) 

let serverUrl = '/api'    //開發環境時 
// let serverUrl = 'http://f.apiplus.cn/'    //生產環境時 
export default { 
   dataUrl: serverUrl + '/bj11x5.json' 
}

方法一:給專案配置API_HOST(自動判斷,依靠webpack進行派發)

解決思路:在config/dev.env.js和prod.env.js裡也就是開發/生產環境下分別配置一下請求的地址API_HOST,開發環境中我們用上面配置的代理地址api,生產環境下用正常的介面地址。

config/dev.env.js:

module.exports = merge(prodEnv, {
   NODE_ENV: '"development"',    //開發環境
   API_HOST:"/api/"
})

prod.env.js:

module.exports = {
   NODE_ENV: '"production"',        //生產環境
   API_HOST:'"http://10.1.5.11:8080/"'
}

 

參考部落格:https://www.cnblogs.com/wangyongcun/p/7665687.html

                  https://blog.csdn.net/kirinlau/article/details/78611774

 

文章僅為本人學習過程的一個記錄,僅供參考,如有問題,歡迎指出

對部落格文章的參考,若原文章博主介意,請聯絡刪除!請原諒