Axios代理配置及封裝響應(yīng)攔截處理方式
Axios代理配置及響應(yīng)攔截處理
Axios是vue官方推薦的異步處理方案,所以在幾個(gè)vue的項(xiàng)目里,都用到了,所以這里寫(xiě)一下Axios的代理配置和響應(yīng)攔截處理
代理配置
代理主要是為了解決跨域問(wèn)題,但是現(xiàn)在常規(guī)解決跨域的方式,就是讓后端配置響應(yīng)頭,使用cors方式跨域前端基本不需要任何處理。
但是有時(shí)候后端比較懶,就需要前端通過(guò)代理請(qǐng)求完成跨域,其實(shí)就是相當(dāng)于在本地開(kāi)了一個(gè)服務(wù)器,通過(guò)服務(wù)器進(jìn)行向另一個(gè)服務(wù)器的代理請(qǐng)求。
但是這樣又會(huì)產(chǎn)生一定問(wèn)題,就是再部署到服務(wù)器上時(shí),前端項(xiàng)目也必須設(shè)置代理,或者直接和后端項(xiàng)目部署同源環(huán)境
下面是代理請(qǐng)求的配置:
//config/index.js 文件里
module.exports = {
? ? ?dev{
? ? ? ? proxyTable: {
? ? ? ? ? '/': { //將開(kāi)頭為 ‘/'的接口替換
? ? ? ? ? ? target: 'http://www.hahaha.com/', ?//導(dǎo)向這個(gè)地址
? ? ? ? ? ? changeOrigin: true,
? ? ? ? ? ? ws:true,
? ? ? ? ? ? pathRewrite: {
? ? ? ? ? ? ? '^/': '' ? ?//將開(kāi)頭的斜杠去掉
? ? ? ? ? ? }
? ? ? ? ? },
? ? ? ? ? '/ws/**': { ? //因?yàn)轫?xiàng)目中用到了websocket 所以這里還配置websocket的代理
? ? ? ? ? ? ? target: 'ws://www.hahaha.com',
? ? ? ? ? ? ? ws: true,
? ? ? ? ? ? ? secure: false,
? ? ? ? ? ? ? logLevel: 'debug',
? ? ? ? ? }
? ? ? }
? ? ? ...
? ? }
? ?host: '0.0.0.0', //這里順便一提,把host改成'0.0.0.0‘后可以讓局域網(wǎng)內(nèi)的電腦直接訪問(wèn)項(xiàng)目,默認(rèn)是localhost
? ? ...
}響應(yīng)內(nèi)容攔截處理
因?yàn)槲覀兊腶xios請(qǐng)求響應(yīng)會(huì)將網(wǎng)絡(luò)請(qǐng)求信息的狀態(tài)碼返回,而通常我們實(shí)際運(yùn)用中不是很需要這樣的內(nèi)容,為了方便我們可以進(jìn)行統(tǒng)一處理,最后只返回真正的實(shí)際內(nèi)容。
同時(shí)我們希望雖然網(wǎng)絡(luò)請(qǐng)求成功,但是如果請(qǐng)求的內(nèi)容失敗的話,也會(huì)流轉(zhuǎn)到catch步驟,也就是捕獲錯(cuò)誤
代碼如下
const http = axios.create({
? baseURL: 'api/',
? timeout: 20000,
}); ? //創(chuàng)建axios對(duì)象
//對(duì)axios對(duì)象響應(yīng)的攔截處理
http.interceptors.response.use((response) => {
//進(jìn)入這里代表請(qǐng)求成功,網(wǎng)絡(luò)請(qǐng)求狀態(tài)碼是200,但是我們要對(duì)請(qǐng)求的內(nèi)容是否成功進(jìn)行判斷
? if (response.data.ErrorCode !== 0) { ? //因?yàn)槲覀冺?xiàng)目里設(shè)定0代表請(qǐng)求成功,所以非零的我們都會(huì)直接reject
? ? return Promise.reject(response.data);
? } ??
? return Promise.resolve(response.data); //ErrorCode為0的直接返回response.data將網(wǎng)絡(luò)的狀態(tài)碼直接過(guò)濾掉
}, (error) => {
//進(jìn)入這里都網(wǎng)絡(luò)狀態(tài)碼非200的,可能是因?yàn)榻涌阱e(cuò)誤,也可能是沒(méi)有token等原因
? if(error.constructor.prototype.name == "Error") { ?//這里判斷返回的是否是錯(cuò)誤對(duì)象,如果是的說(shuō)明是網(wǎng)絡(luò)請(qǐng)求錯(cuò)誤
? ? Message({ showClose: true,
? ? ? message: '網(wǎng)絡(luò)鏈接問(wèn)題或登陸失效!',
? ? ? type: 'error'})
? ? return new Promise(() => {}) //這里我們可以進(jìn)行鏈?zhǔn)疆惒教幚?
? }
? return error.data;//其他請(qǐng)求,說(shuō)明是因?yàn)檎?qǐng)求內(nèi)容錯(cuò)誤了,直接返回錯(cuò)誤內(nèi)容
});
//處理前返回內(nèi)容
{
? ? status: 200
? ? statusText: "OK",
? ? data{
? ? ?? ?ErrorCode: 0,
? ? ? ? token:'xxxx',
? ? ? ? name:'xxxx'
? ? }
}
//處理后返回內(nèi)容
{
? ? ErrorCode: 0,
? ? token:'xxxx',
? ? name:'xxxx'
}Axios的proxy代理配置解析
proxy實(shí)際上是一種前端開(kāi)發(fā)中方便開(kāi)發(fā)用的東西,它在本地可以跨域訪問(wèn)其他的網(wǎng)站,但是當(dāng)頁(yè)面打包之后,proxy就會(huì)失效
我是在vue.config.js中設(shè)置proxy的,代碼如下
? ? proxy: {
? ? ? //匹配到的路徑
? ? ? "/api": {
? ? ? ? target: "XXXXXXXXX", //目標(biāo)主機(jī)地址
? ? ? ? changeOrigin: true,//是否啟動(dòng)代理
? ? ? ? pathRewrite: {?? ?//重寫(xiě)路徑
? ? ? ? ? "^/api": ''?? ?//如果遇到前綴為'/api'的url,將它重寫(xiě)為''
? ? ? ? }
? ? ? }
? ? }舉個(gè)例子:
proxy的target設(shè)置成http://www.web-jshtml.cn/aaa
如果你想訪問(wèn)http://192.168.1.114:8080/api/,這時(shí)候,你碰到了/api,你需要將/api前邊的域名轉(zhuǎn)換為target的地址,即
將http://192.168.1.114:8080轉(zhuǎn)換為http://www.web-jshtml.cn/aaa
即是
http://www.web-jshtml.cn/aaa/api/這個(gè)地址,但是因?yàn)閜roxy的pathRewrite里需要將'/api'轉(zhuǎn)換為空字符串,所以最終的訪問(wèn)地址是
http://www.web-jshtml.cn/aaa
直接上文檔,文檔里有詳細(xì)資料


以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue+SpringBoot實(shí)現(xiàn)支付寶沙箱支付的示例代碼
本文主要介紹了Vue+SpringBoot實(shí)現(xiàn)支付寶沙箱支付的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-06-06
vant的picker組件設(shè)置文字超長(zhǎng)滾動(dòng)方式
這篇文章主要介紹了vant的picker組件設(shè)置文字超長(zhǎng)滾動(dòng)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
詳解Vue.js在頁(yè)面加載時(shí)執(zhí)行某個(gè)方法
這篇文章主要介紹了詳解Vue.js在頁(yè)面加載時(shí)執(zhí)行某個(gè)方法的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-11-11
淺談Vuex的this.$store.commit和在Vue項(xiàng)目中引用公共方法
這篇文章主要介紹了淺談Vuex的this.$store.commit和在Vue項(xiàng)目中引用公共方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07
Vue 3.0 前瞻Vue Function API新特性體驗(yàn)
這篇文章主要介紹了Vue 3.0 前瞻Vue Function API新特性體驗(yàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
vue中render函數(shù)和h函數(shù)以及jsx的使用方式
這篇文章主要介紹了vue中render函數(shù)和h函數(shù)以及jsx的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08

