axios攔截器

為什么要使用axios攔截器?

頁(yè)面發(fā)送http請(qǐng)求尸昧,很多情況我們要對(duì)請(qǐng)求和其響應(yīng)進(jìn)行特定的處理缤弦;例如每個(gè)請(qǐng)求都附帶后端返回的token,在這種情況下彻磁,axios為開(kāi)發(fā)者提供了這樣一個(gè)API(攔截器)碍沐。

攔截器分為:
  • 請(qǐng)求(request)攔截器
  • 響應(yīng)(response)攔截器。

怎么操作衷蜓?

request.js的編寫(xiě)(一般是在utils文件夾創(chuàng)建一個(gè)request.js)

import axios from "axios";//引入axios
import router from "../router/index";//引入路由
import store from "../store";//如果需要在store內(nèi)取數(shù)據(jù)就要引入store

// 配置
const axiosInstance = axios.create({
    baseURL: 'http://192.168.0.182:8080',  //前部分地址
    timeout: 20000  // 請(qǐng)求超時(shí)時(shí)間(單位ms)
})

 // 添加請(qǐng)求攔截器
 axiosInstance.interceptors.request.use(config => {
    let token = localStorage.getItem("Token");
    //當(dāng)前token值是本地存儲(chǔ)累提,如果放在store內(nèi)需store.state.token獲取token
    if (token) {
      // 給請(qǐng)求頭添加laohu-token
      config.headers["Token"] = token;
    }
    return config;
  },
  error => {
    console.log(error); // for debug
    Promise.reject(error);
  }
);


// 添加響應(yīng)攔截器
axiosInstance.interceptors.response.use(response=> {
   // 如果返回的狀態(tài)碼為200,說(shuō)明接口請(qǐng)求成功磁浇,可以正常拿到數(shù)據(jù)
   // 否則的話(huà)拋出錯(cuò)誤
   if (response.status === 200) {
         return Promise.resolve(response);
      } else {
          return Promise.reject(response);
      }
  }, error => {
    // 服務(wù)器狀態(tài)碼不是2開(kāi)頭的的情況
    // 這里可以跟你們的后臺(tái)開(kāi)發(fā)人員協(xié)商好統(tǒng)一的錯(cuò)誤狀態(tài)碼
    // 然后根據(jù)返回的狀態(tài)碼進(jìn)行一些操作斋陪,例如登錄過(guò)期提示,錯(cuò)誤提示等等
    // 下面列舉幾個(gè)常見(jiàn)的操作置吓,其他需求可自行擴(kuò)展
  if (error.response.status) {
      switch (error.response.status) {
       // 401: 未登錄
       // 未登錄則跳轉(zhuǎn)登錄頁(yè)面无虚,并攜帶當(dāng)前頁(yè)面的路徑
       // 在登錄成功后返回當(dāng)前頁(yè)面,這一步需要在登錄頁(yè)操作衍锚。
       case 401:
          router.replace({
          path: '/login',
          query: {
                   redirect: router.currentRoute.fullPath
               }
            });
        break;

        // 403 token過(guò)期
        // 登錄過(guò)期對(duì)用戶(hù)進(jìn)行提示
        // 清除本地token和清空vuex中token對(duì)象
        // 跳轉(zhuǎn)登錄頁(yè)面
        case 403:
          Message({
          message: '登錄過(guò)期友题,請(qǐng)重新登錄',
          duration: 1000,
          forbidClick: true
         });
         ....
         // 其他錯(cuò)誤,直接拋出錯(cuò)誤提示
         default:
           Message({
           message: error.response.data.message,
           duration: 1500,
           forbidClick: true
            });
     }
    return Promise.reject(error);
  });

 //導(dǎo)出
export default axiosInstance;

在項(xiàng)目中調(diào)用攔截器

axios封裝好之后戴质,調(diào)用就很簡(jiǎn)單了度宦。我們把接口統(tǒng)一寫(xiě)在api文件夾中。(如果你的業(yè)務(wù)非常復(fù)雜告匠,建議把不同模塊或組件的請(qǐng)求分開(kāi)寫(xiě)到不同的文件里戈抄,這樣方便維護(hù))。

//準(zhǔn)備
import $http from "@/utils/request.js";
import qs from "qs"http://用來(lái)序列化post類(lèi)型的數(shù)據(jù)后专,某些請(qǐng)求會(huì)用得到

//發(fā)送axios請(qǐng)求
export const 接口名 = (data) => $http.post('前部分地址+后部分地址',qs.stringify(data)).then((data)=>{
    return data.data
  })

在具體的組件中進(jìn)行調(diào)用

import { 接口名} from '@/api/接口js'
export default {
  data() {
    return {}
  },
  created() {
      this.getData();
  }
 methods:{
      getData() {
          接口名(參數(shù)).then(res => {
          console.log(res)
          //拿到的res進(jìn)行一番操作或者渲染
          })
      }
  },
}

補(bǔ)充:

關(guān)于Vue中划鸽,序列化字符串,處理發(fā)送請(qǐng)求的參數(shù)
使用工具qs來(lái)處理參數(shù)

步驟:
1戚哎、首先先下載:npm i qs
2裸诽、然后引入 :import qs from 'qs'
3、qs主要有兩個(gè)方法 :
方法一:將對(duì)象序列化建瘫,多個(gè)對(duì)象之間用&拼接(拼接是由底層處理崭捍,無(wú)需手動(dòng)操作)

qs.stringify()  轉(zhuǎn)換成查詢(xún)字符串
let comments = {content: this.inputValue}
let comValue = qs.stringify(comments)

方法二:將序列化的內(nèi)容拆分成一個(gè)個(gè)單一的對(duì)象

qs.parse() 轉(zhuǎn)換成json對(duì)象
let comValue = qs.parse(comments)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者啰脚。
  • 序言:七十年代末衬吆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子浙炼,更是在濱河造成了極大的恐慌,老刑警劉巖亮航,帶你破解...
    沈念sama閱讀 222,807評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異匀们,居然都是意外死亡缴淋,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)泄朴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)重抖,“玉大人,你說(shuō)我怎么就攤上這事祖灰≈优妫” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,589評(píng)論 0 363
  • 文/不壞的土叔 我叫張陵局扶,是天一觀的道長(zhǎng)恨统。 經(jīng)常有香客問(wèn)我,道長(zhǎng)三妈,這世上最難降的妖魔是什么畜埋? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,188評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮畴蒲,結(jié)果婚禮上悠鞍,老公的妹妹穿的比我還像新娘。我一直安慰自己饿凛,他們只是感情好狞玛,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著涧窒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锭亏。 梳的紋絲不亂的頭發(fā)上纠吴,一...
    開(kāi)封第一講書(shū)人閱讀 52,785評(píng)論 1 314
  • 那天,我揣著相機(jī)與錄音慧瘤,去河邊找鬼戴已。 笑死,一個(gè)胖子當(dāng)著我的面吹牛锅减,可吹牛的內(nèi)容都是我干的糖儡。 我是一名探鬼主播,決...
    沈念sama閱讀 41,220評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼怔匣,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼握联!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,167評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤金闽,失蹤者是張志新(化名)和其女友劉穎纯露,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體代芜,經(jīng)...
    沈念sama閱讀 46,698評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡埠褪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了挤庇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钞速。...
    茶點(diǎn)故事閱讀 40,912評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嫡秕,靈堂內(nèi)的尸體忽然破棺而出渴语,到底是詐尸還是另有隱情,我是刑警寧澤淘菩,帶...
    沈念sama閱讀 36,572評(píng)論 5 351
  • 正文 年R本政府宣布遵班,位于F島的核電站,受9級(jí)特大地震影響潮改,放射性物質(zhì)發(fā)生泄漏狭郑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評(píng)論 3 336
  • 文/蒙蒙 一汇在、第九天 我趴在偏房一處隱蔽的房頂上張望翰萨。 院中可真熱鬧,春花似錦糕殉、人聲如沸亩鬼。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,746評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)雳锋。三九已至,卻和暖如春羡洁,著一層夾襖步出監(jiān)牢的瞬間玷过,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,859評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工筑煮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辛蚊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,359評(píng)論 3 379
  • 正文 我出身青樓真仲,卻偏偏與公主長(zhǎng)得像袋马,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子秸应,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評(píng)論 2 361

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