vue.config.js的proxy為什么不起作用

問(wèn)題:本地開(kāi)發(fā),調(diào)用后端的接口,一調(diào)用就報(bào)CORS error跨域

第一種寫法:后端網(wǎng)關(guān)沒(méi)有做跨域處理,但是這種方法如果用到多個(gè)服務(wù)時(shí),會(huì)導(dǎo)致需要配置多個(gè)代理
image.png

env文件

VUE_APP_WEB_API=http://192.168.200.176:5080/verify

vue.config.js文件

  devServer: {
    proxy: { // 配置本地代理
      '/api': {
        target: 'http://192.168.200.176:5080/verify',
        secure: false,
        changeOrigin: true, // 開(kāi)啟代理,在本地創(chuàng)建一個(gè)虛擬服務(wù)端
        // ws: true, // 是否啟用websockets
        /*
        pathRewrite意味著當(dāng)我們請(qǐng)求本地http://localhost:8080/api/uploadAndValid
        地址時(shí),實(shí)際訪問(wèn)的是
        http://192.168.200.176:5080/verify/uploadAndValid
        注意:必須把env文件的VUE_APP_WEB_API=http://localhost:8080/api改為本地的
        */
        pathRewrite: {
          '^/api': ''
        }
      }
    }
  },

上傳頁(yè)面-調(diào)用接口http://192.168.200.176:5080/verify/uploadAndValid

<template>
  <div class="signFileUploadCotain">
    <Upload
      ref="upload"
      type="drag"
      :action="`${baseUrl}/uploadAndValid`">
        <p style="font-weight:bold;">點(diǎn)擊上傳或拖拽文件到這里</p>
    </Upload>
  </div>
</template>

<script>
//baseUrl  = http://192.168.200.176:5080/verify
const baseUrl = process.env.VUE_APP_WEB_API
</script>

但是請(qǐng)求的url并沒(méi)有任何變化,說(shuō)明proxy的配置并沒(méi)有起任何作用


image.png

原因:
proxy的配置pathRewrite是針對(duì)本地的服務(wù),所以env的配置文件要是http://localhost:8080/api,這樣所有的請(qǐng)求接口都帶有/api,并在遇到/api時(shí)自動(dòng)代理到proxy設(shè)置的target,
修改后
env

VUE_APP_WEB_API=http://localhost:8080/api

vue.config.js

  devServer: {
    proxy: { // 配置本地代理
      '/api': {
        target: 'http://192.168.200.176:5080/verify',
        secure: false,
        changeOrigin: true, // 開(kāi)啟代理,在本地創(chuàng)建一個(gè)虛擬服務(wù)端
        // ws: true, // 是否啟用websockets
        /*
        pathRewrite意味著當(dāng)我們請(qǐng)求本地http://localhost:8080/api/uploadAndValid地址時(shí),
        實(shí)際訪問(wèn)的是http://192.168.200.176:5080/verify/uploadAndValid
        注意:必須把env文件的VUE_APP_WEB_API=http://localhost:8080/api改為本地的
        */
        pathRewrite: {
          '^/api': ''
        }
      }
    }
  },

修改后接口請(qǐng)求成功,不再跨域

注意:訪問(wèn)http://localhost:8080/api/uploadAndValid實(shí)際是訪問(wèn)http://192.168.200.176:5080/verify/uploadAndValid
注意:env文件和vue.config.js修改時(shí),需要重啟服務(wù)修改才能起作用
image.png
方法二:后端網(wǎng)關(guān)做了跨域處理

2-1env的服務(wù)地址不做配置,這樣系統(tǒng)會(huì)自動(dòng)識(shí)別本地的服務(wù),部署到線上時(shí),也會(huì)自動(dòng)獲取

VUE_APP_WEB_API=

2-2vue.config.js文件

    proxy: { // 配置本地代理
      '/aio': {
        target: 'http://192.168.200.176:5080',
        secure: false,
        changeOrigin: true // 開(kāi)啟代理,在本地創(chuàng)建一個(gè)虛擬服務(wù)端
        /*
        pathRewrite意味著當(dāng)我們請(qǐng)求本地http://localhost:8081/aio/verify/uploadAndValid地址時(shí),
        實(shí)際訪問(wèn)的是http://192.168.200.176:5080/aio/verify/uploadAndValid
        注意:必須把env文件的VUE_APP_WEB_API=  不賦值,這樣部署后才會(huì)直接用線上地址,本地也會(huì)自動(dòng)取
        本地地址
        */
        // pathRewrite: {
        //   '^/aio': '/aio'
        // }
      }
    }

2-3.接口文件

const baseUrl = process.env.VUE_APP_WEB_API
export async function getTypeList (params) {
  return axios.request({
    url: `${baseUrl}/aio/verify/typeList`,
    method: 'post',
    data: params
  })
}
注意:如果將/aio/verify設(shè)置成某一個(gè)變量,再像${baseUrl}這樣使用時(shí),

會(huì)導(dǎo)致代理無(wú)用,將會(huì)變成(failed)net::ERR_NAME_NOT_RESOLVED
請(qǐng)求地址為:http://aio/verify/typeList

const opapi = '/aio/verify'
export async function getTypeList (params) {
  return axios.request({
    url: `${baseUrl}/${opapi}/typeList`,
    method: 'post',
    data: params
  })
}
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容