Vue---vue-cli 中的proxyTable解決開發環境中的跨域問題


  使用vue+vue-cli+axios+element-ui開發后台管理系統時,遇到一個問題,后台給了一個接口,我這邊用axios請求數據,控制台總是報405錯誤和跨域錯誤

  錯誤 405? 沒見過!! 查了一下資料, 錯誤405表示--用來訪問本頁面的HTTP謂詞不被允許,謂詞指的就是GET、POST 和 HEAD等。說白了就是請求的方法不被允許!可是,我是完全按照后台給的接口文檔寫的啊

 this.$http({
          method: 'POST',
          url: 'auth/login',
          data: {
            'username': this.username,
            'password': this.password
          }
        }).then(res => {
          console.log(res)
        }).catch(err => {
          console.log(err)
        })

  (注:$http是我自己封裝好的axios    Vue.prototype.$http = axios)

  問題出來哪里呢?

  我又看了一下控制台的Network,headers信息顯示如下:

 

  明明寫的是POST請求,怎么到瀏覽器“嘴里”就變成OPTIONS?  OPTIONS又是什么東西?

  繼續查。。。。   簡單來說,OPTIONS是正式請求之前的一次“預查詢”,瀏覽器先詢問服務器,當前網頁所在的域名是否在服務器的許可名單之中,以及可以使用哪些HTTP動詞和頭信息字段。只有得到肯定答復,瀏覽器才會發出正式的XMLHttpRequest請求,否則就報錯。

  結果顯而易見了,因為存在跨域,瀏覽器先發出一次“預查詢”,查詢不通過,返回HTTP 405 錯誤 ,接着跨域也失敗,返回跨域失敗結果。

  怎么解決這個問題呢?

    通過查詢資料,vue-cli的proxyTable可以解決跨域.

    很簡單,在項目目錄里找到config文件夾,然后找到index.js,找到proxyTable選項

    設置成:

  

proxyTable: {
      '/api': {
    target: 'http://baidu.com',
    pathRewrite: {
      '^/api': ''
    }

  簡單解釋一下: ‘/api’ 是 url的別名   target指的是要代理的url  其他照着填就好。

  在axios使用:

  

 this.$http({
          method: 'POST',
          url: '/api/auth/login',
          data: {
            'username': this.username,
            'password': this.password
          }
        }).then(res => {
          console.log(res)
        }).catch(err => {
          console.log(err)
        })

  在控制台顯示:

  

 

    這就搞定了!

                                          ----- 2017-06-26 22:30

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM