vue跨域proxy代理配置詳解
引言
相信很多人都用過proxy,這里就不多說proxy的基本使用,這里要說一下很多人使用proxy的一個誤區(qū),大家一般都是直接將管官方的例子拿過來,修改一下代理目標直接就是用了,但是代理的路徑匹配你真的會用么?
如果你能夠認證看完那么我保證你下次再配置代理的時候就能一步就能完成,無需多次npm run serve
先來一個正則熱熱身待會需要用,看懂了再往下看:

例一
這是我使用express自己搭建的一個超級簡單的服務(wù)器,代碼如下(沒有設(shè)置允許跨域請求)
// 引入 express 框架
const express = require("express")
// 創(chuàng)建網(wǎng)站服務(wù)器
const app = express()
app.get("/list", (req, res) => {
// 向客戶端直接響應(yīng)一個對象
res.send({ name: "張三", age: 333 })
})
app.get("/aa/api/list", (req, res) => {
// 向客戶端直接響應(yīng)一個對象
res.send({ name: "李四", age: 666 })
})
app.get("/aa/list", (req, res) => {
// 向客戶端直接響應(yīng)一個對象
res.send({ name: "王五", age: 888 })
})
// 監(jiān)聽端口
app.listen(3000)
console.log("網(wǎng)站服務(wù)器啟動成功")下面是我的vue.config.js的配置信息
const path = require("path")
module.exports = {
devServer: {
// open: true, //打開瀏覽器
overlay: {
//當(dāng)出現(xiàn)編譯錯誤或警告時,在瀏覽器中顯示全屏覆蓋。
warnings: false, //不顯示警告
errors: true, //顯示錯誤
},
proxy: {
//下面的key是一個正則表達式它的/api前加上^和不加^符號差別非常大
"/api": {
target: "http://localhost:3000",
pathRewrite: {
//下面的key是一個正則表達式它的/api前加上^和不加^符號差別非常大
"^/api": "",
},
},
},
},
runtimeCompiler: true,
lintOnSave: false,
configureWebpack: {
resolve: {
alias: {
"@": path.resolve(__dirname, "src"),
},
},
},
}大家只需要關(guān)注下面的一部分就可以了,其他的對這次講解沒有影響:

發(fā)送請求的代碼如下:
<template>
<div>
<!-- 測試跨域,這個測試的非常好 -->
<el-button @click="send1" type="success">點我發(fā)送請求1</el-button>
<el-button @click="send2" type="success">點我發(fā)送請求2</el-button>
</div>
</template>
<script>
import { axiosImpl } from "@/utils/request"
export default {
methods: {
async send1() {
let res = await axiosImpl.get("/aa/api/list")
console.log(res)
},
async send2() {
let res = await axiosImpl.get("/api/list")
console.log(res)
},
},
}
</script>
<style></style>很簡單的幾行代碼,那么此時點擊兩個按鈕會分別輸入什么呢?
看結(jié)果:

也許想的和你不太一樣,那么這就是我們要說的重點了,在圈1和圈2圈起來的地方,是一個正則表達式
由于此時圈1沒有加^符號,那么所有帶有/api的請求都會進來,然后進行代理,在進行pathRewrite的時候,由于加上了^符號,那么就只會匹配以/api開頭的路徑,把以/api開頭的這一個/符號和三個字母變?yōu)榭?,其余的都保留下來,因此第一個請求到服務(wù)器就變成了/aa/api/list,第二個就變成了/list,因此結(jié)果就變成了上面的樣子。

例二
如果將vue.config.js的值改成下面的這個樣子,其余的不變,結(jié)果又會是什么呢?
結(jié)果如下:



原理和上面的一樣
由于此時圈1加上了^符號,那么所有以/api開頭的請求都會進來,然后進行代理,在代理的時候,由于沒有上了^符號,那么就會吧路徑中所有的/api都變成空,對于請求二到最后到服務(wù)器就只剩下了一個/list,因此結(jié)果就變成了上面的樣子。

總結(jié)
圈一和圈二的地方都是正則表達式,再配置proxy的時候一定要看清楚有沒有加^符號或者^符號有沒有加錯,或者是不是寫成了正則表達式里面的其他符號
到此這篇關(guān)于vue跨域proxy代理配置詳解的文章就介紹到這了,更多相關(guān)vue proxy內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue3使用keep?alive實現(xiàn)前進更新后退銷毀
這篇文章主要為大家介紹了vue3中使用keep?alive實現(xiàn)前進更新后退銷毀示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06
vue報錯Failed to execute 'appendChild&apos
這篇文章主要為大家介紹了vue報錯Failed to execute 'appendChild' on 'Node'解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11
vue+element的表格實現(xiàn)批量刪除功能示例代碼
這篇文章主要介紹了vue+element的表格實現(xiàn)批量刪除功能示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08
element-ui中的clickoutside點擊空白隱藏元素
這篇文章主要為大家介紹了element-ui中的clickoutside點擊空白隱藏元素示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03
vue項目使用$router.go(-1)返回時刷新原來的界面操作
這篇文章主要介紹了vue項目使用$router.go(-1)返回時刷新原來的界面操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07

