vue攔截器的一次實(shí)踐

起因

最近在做一個(gè)項(xiàng)目前端框架使用的是vue酪惭,項(xiàng)目接近尾聲的時(shí)候發(fā)現(xiàn)需要增加一個(gè)對(duì)所有的http請(qǐng)求過(guò)濾的功能油宜,所有的請(qǐng)求需要加上token再發(fā)送給服務(wù)器掂碱,服務(wù)器根據(jù)token判斷用戶(hù)身份是否有效,響應(yīng)也需要過(guò)濾慎冤,判斷是否授權(quán)疼燥,進(jìn)行統(tǒng)一處理。經(jīng)過(guò)調(diào)研發(fā)現(xiàn)蚁堤,很多大佬推薦了vue-resource的interceptors攔截器醉者,但是由于vue的作者尤雨溪已經(jīng)聲明不再對(duì)vue-resource進(jìn)行維護(hù),建議大家使用axios,所以果斷pass掉了這個(gè)方法撬即。然后發(fā)現(xiàn)立磁,axios提供了interceptors關(guān)鍵字實(shí)現(xiàn)攔截器的功能,下面就詳細(xì)說(shuō)明攔截器的實(shí)現(xiàn)剥槐。

第一步

在閱讀相關(guān)資料的時(shí)候唱歧,有兩種方法可以實(shí)現(xiàn)攔截器,設(shè)置配置文件和重新封裝axios粒竖,在嘗試第一種方法時(shí)會(huì)出現(xiàn)了無(wú)法解決的問(wèn)題颅崩,無(wú)果,故采用了重新封裝axios的方法蕊苗,首先在項(xiàng)目文件下新建utils文件夾沿后,在該文件夾下新建文件httpAxios.js。

├── src
|   ├──example.vue
|   └──utils
|       ├──httpAxios.js

第二步

http請(qǐng)求攔截器朽砰,首先對(duì)http的請(qǐng)求進(jìn)行攔截尖滚,將所有的http請(qǐng)求報(bào)文的header加上Authorization字段,內(nèi)容為token锅移,token之前通過(guò)vuex保存在store中熔掺。代碼如下:

// http request 攔截器
axios.interceptors.request.use(
  (config) => {
    if(store.state.token) {
      config.headers.Authorization = `${store.state.token}`;  // token保存在store中
    }
    return config;
  },
  (err) => {
    return Promise.reject(err);
  }
);

第三步

http響應(yīng)攔截器,對(duì)所有response進(jìn)行判斷非剃,401狀態(tài)碼表示未授權(quán)置逻,代碼如下:

// http response 攔截器
axios.interceptors.response.use(
  (response) => {
    return response;
  },
  (error) => {
    if(error.response) {
      switch (error.response.status) {
        case 401:
          router.replace({
            path: '/login',
            query: {redirect: router.currentRoute.fullPath}
          });
      }
    }
    return Promise.reject(error.response.data);
  }
);

不過(guò)我司的授權(quán)并不是經(jīng)過(guò)瀏覽器實(shí)現(xiàn)的,是通過(guò)約定好的錯(cuò)誤碼來(lái)表示用戶(hù)登錄失效备绽,所以我并沒(méi)有在error中進(jìn)行處理券坞,而是在response中判斷錯(cuò)誤碼來(lái)處理的。
最后整個(gè)httpAxios.js文件的內(nèi)容是:

import Vue from 'vue';
import axios from 'axios';
import store from '../store/';

// 默認(rèn)配置
axios.defaults.baseURL = 'http://www.xxxx.com'; 
axios.defaults.headers.post['Content-Type'] = 'application/json';

export const request = (config) => {
  return axios(config);
};

// http request 攔截器
axios.interceptors.request.use(
  (config) => {
    if(store.state.token) {
      config.headers.Authorization = `${store.state.token}`;  // token保存在store中
    }
    return config;
  },
  (err) => {
    return Promise.reject(err);
  }
);

// http response 攔截器
axios.interceptors.response.use(
  (response) => {
    return response;
  },
  (error) => {
    if(error.response) {
      switch (error.response.status) {
        case 401:
          router.replace({
            path: '/login',
            query: {redirect: router.currentRoute.fullPath}
          });
      }
    }
    return Promise.reject(error.response.data);
  }
);

第四步

既然重新封裝了axios肺素,那么使用方法當(dāng)然會(huì)有一些變化恨锚,下面舉例說(shuō)明使用方法。如果要在example.vue中使用該插件倍靡,那么example.vue文件中應(yīng)該這樣寫(xiě):

import {request} from '/utils/httpAxios.js';
request({ method: 'post', url: '', data: {}
           }). then(function (response) {
              //處理成功的請(qǐng)求
           }). catch(function (error) {
              sonsole.log(error);
        });

那么猴伶,http攔截器就完工了,可以愉快地使用了~

再啰嗦一句

第一次寫(xiě)文章塌西,希望能與大家分享技術(shù)踩過(guò)的坑他挎,走過(guò)的路,也希望能和大家多多交流捡需,共同進(jìn)步办桨。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市站辉,隨后出現(xiàn)的幾起案子呢撞,更是在濱河造成了極大的恐慌损姜,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件殊霞,死亡現(xiàn)場(chǎng)離奇詭異摧阅,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)脓鹃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)逸尖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人瘸右,你說(shuō)我怎么就攤上這事娇跟。” “怎么了太颤?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵苞俘,是天一觀(guān)的道長(zhǎng)目养。 經(jīng)常有香客問(wèn)我厘擂,道長(zhǎng)光稼,這世上最難降的妖魔是什么炕矮? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮鞍泉,結(jié)果婚禮上绪颖,老公的妹妹穿的比我還像新娘欠母。我一直安慰自己锚贱,他們只是感情好仔戈,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著拧廊,像睡著了一般监徘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上吧碾,一...
    開(kāi)封第一講書(shū)人閱讀 49,071評(píng)論 1 285
  • 那天凰盔,我揣著相機(jī)與錄音,去河邊找鬼倦春。 笑死户敬,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的睁本。 我是一名探鬼主播山叮,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼添履!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起脑又,我...
    開(kāi)封第一講書(shū)人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤暮胧,失蹤者是張志新(化名)和其女友劉穎锐借,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體往衷,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡钞翔,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了席舍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片布轿。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖来颤,靈堂內(nèi)的尸體忽然破棺而出汰扭,到底是詐尸還是另有隱情,我是刑警寧澤福铅,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布萝毛,位于F島的核電站,受9級(jí)特大地震影響滑黔,放射性物質(zhì)發(fā)生泄漏笆包。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一略荡、第九天 我趴在偏房一處隱蔽的房頂上張望庵佣。 院中可真熱鬧,春花似錦汛兜、人聲如沸巴粪。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)验毡。三九已至,卻和暖如春帝嗡,著一層夾襖步出監(jiān)牢的瞬間晶通,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工哟玷, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留狮辽,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓巢寡,卻偏偏與公主長(zhǎng)得像喉脖,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子抑月,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • vue-login-intercept 一個(gè) Vue.js 的小demo 介紹 項(xiàng)目地址树叽,有喜歡的歡迎 star ...
    無(wú)亦情閱讀 12,012評(píng)論 4 21
  • 開(kāi)源技術(shù)(Open Source)大家應(yīng)該都不陌生。首先請(qǐng)同學(xué)們思考一個(gè)問(wèn)題谦絮,為什么會(huì)有開(kāi)源技術(shù)產(chǎn)生呢题诵? 這個(gè)問(wèn)題...
    小麥哥閱讀 256評(píng)論 0 0
  • 一般洁仗,我們會(huì)統(tǒng)一的設(shè)置狀態(tài)欄字體的顏色 步驟一可以在A(yíng)ppDelegate.m文件的設(shè)置,此時(shí)還需要將info.p...
    FallPine閱讀 536評(píng)論 0 0
  • 精絕 西域三十六古國(guó)之一 歷史上驚鴻一瞥 最詭秘的國(guó)度 小人國(guó)性锭?還是獨(dú)目族侍從赠潦? ▲大漠 精絕古城隨著鬼吹燈電影的...
    冰葉葉閱讀 445評(píng)論 0 0