vue-resource 攔截器使用詳解
在vue項(xiàng)目使用vue-resource的過(guò)程中,臨時(shí)增加了一個(gè)需求,需要在任何一個(gè)頁(yè)面任何一次http請(qǐng)求,增加對(duì)token過(guò)期的判斷,如果token已過(guò)期,需要跳轉(zhuǎn)至登錄頁(yè)面。如果要在每個(gè)頁(yè)面中的http請(qǐng)求操作中添加一次判斷,那么會(huì)是一個(gè)非常大的修改工作量。那么vue-resource是否存在一個(gè)對(duì)于任何一次請(qǐng)求響應(yīng)捕獲的的公共回調(diào)函數(shù)呢?答案是有的!
vue-resource的interceptors攔截器的作用正是解決此需求的妙方。在每次http的請(qǐng)求響應(yīng)之后,如果設(shè)置了攔截器如下,會(huì)優(yōu)先執(zhí)行攔截器函數(shù),獲取響應(yīng)體,然后才會(huì)決定是否把response返回給then進(jìn)行接收。那么我們可以在這個(gè)攔截器里邊添加對(duì)響應(yīng)狀態(tài)碼的判斷,來(lái)決定是跳轉(zhuǎn)到登錄頁(yè)面還是留在當(dāng)前頁(yè)面繼續(xù)獲取數(shù)據(jù)。
下邊代碼添加在main.js中
Vue.http.interceptors.push((request, next) => { console.log(this)//此處this為請(qǐng)求所在頁(yè)面的Vue實(shí)例 // modify request request.method = 'POST';//在請(qǐng)求之前可以進(jìn)行一些預(yù)處理和配置 // continue to next interceptor next((response) => {//在響應(yīng)之后傳給then之前對(duì)response進(jìn)行修改和邏輯判斷。對(duì)于token時(shí)候已過(guò)期的判斷,就添加在此處,頁(yè)面中任何一次http請(qǐng)求都會(huì)先調(diào)用此處方法 response.body = '...'; return response; }); });
在知道此方法之前,鄙人想了一個(gè)笨方法,但是也能在一定程度上降低修改工作量。方法是為Vue綁定一個(gè)this.$$http.get方法取代this.$http.get方法,每個(gè)頁(yè)面的http請(qǐng)求添加個(gè)$在$http前即可。
// ajax.js function plugin(Vue){ Object.defineProperties(Vue.prototype,{ $$http:{ get(){ return option(Vue); } } }) } function option(Vue){ let v = new Vue(); return { get(a,b){ let promise = new Promise(function(reslove,reject){ v.$http.get(a,b).then((res)=>{ reslove(res) },(err)=>{ //處理token過(guò)期問(wèn)題。 }) }) return promise; } } } module.exports=plugin; //main.js import ajax from './ajax.js' Vue.use(ajax)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
一文詳細(xì)聊聊vue3的defineProps、defineEmits和defineExpose
vue3官方文檔defineProps和defineEmits都是只能在scriptsetup中使用的編譯器宏,下面這篇文章主要給大家介紹了關(guān)于vue3的defineProps、defineEmits和defineExpose的相關(guān)資料,需要的朋友可以參考下2023-02-02用vuex寫了一個(gè)購(gòu)物車H5頁(yè)面的示例代碼
本篇文章主要介紹了用vuex寫了一個(gè)購(gòu)物車H5頁(yè)面的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12vue中跳轉(zhuǎn)界面的3種實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于vue中跳轉(zhuǎn)界面的3種實(shí)現(xiàn)方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07詳解如何提高 webpack 構(gòu)建 Vue 項(xiàng)目的速度
這篇文章主要介紹了詳解如何提高 webpack 構(gòu)建 Vue 項(xiàng)目的速度,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07Vue實(shí)現(xiàn)點(diǎn)擊箭頭上下移動(dòng)效果
這篇文章主要介紹了Vue實(shí)現(xiàn)點(diǎn)擊箭頭上下移動(dòng)效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06關(guān)于Element-ui中Table表格無(wú)法顯示的問(wèn)題及解決
這篇文章主要介紹了關(guān)于Element-ui中Table表格無(wú)法顯示的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08