Vueのvue.config.js的代理devServer.proxy配置,解決開發(fā)環(huán)境跨域問

背景

在做steampy市場(https://steampy.com), 在實現(xiàn)前端應用和后端 API 服務器沒有運行在同一個主機上,需要在開發(fā)環(huán)境下將 API 請求代理到 API 服務器。這個問題可以通過 vue.config.js 中的 devServer.proxy 選項來配置。

問題

Access to XMLHttpRequest at 'http://steampy.com/log'(redirected from 'http://127.
0.0.1:9999/getTrad') from origin 'http://127.0.0.1:8080'has been blocked by
 CORS policy: Response to preflight request doesn't pass access control 
check: Redirect is not allowed for a preflight request.

分析問題

通常vue.config.js 配置普通代理方式


module.exports = {
  devServer: {
    proxy: {
      '/api': {
        target: '',   //要訪問的跨域的域名
        ws: true,  // 是否啟用websockets
        changeOrigin: true //開啟代理:在本地會創(chuàng)建一個虛擬服務端,然后發(fā)送請求的數(shù)據(jù),并同時接收請求的數(shù)據(jù),這樣客戶端端和服務端進行數(shù)據(jù)的交互就不會有跨域問題
      },
      '/foo': {
        target: ''
      }
    }
  }
}

解決方法

module.exports = {
    devServer: {
        host: '0.0.0.0',
        port: 8080,
        open: true,
        overlay: {
            warnings: false,
            errors: true
        },
        proxy: {
            '/api': {
                target: 'https://steampy.com/',
                ws: true,
                changOrigin: true,
                pathRewrite: {
                    '^/api': '' // 思路是如果是開發(fā)環(huán)境,就給所有要代理的接口統(tǒng)一加上前綴,然后代理請求時再統(tǒng)一通過rewrite去掉
                }
            },
            '/foo': {
                target: '<other_url>'
            }
        }
    }
}

注意

  1. 一般大家在proxy 中配置了 target,ws,changeOrigin等,我這里添加了( pathRewrite: {'^/api': '' })才解決問題
  2. pathRewrite: { '^/api': '' } , 如果是開發(fā)環(huán)境,就給所有要代理的接口統(tǒng)一加上前綴,然后代理請求時再統(tǒng) 一通過rewrite去掉, 如果是生成環(huán)境下,就可以不用添加了.
  3. 同時檢查服務器端是否配置了,跨域解決代碼. 需要前后端配合解決。
    (大家一般出現(xiàn)問題都是第三部,服務器端不支持,你是如何都無法通過請求的,一定知悉.)
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容