VUE.JS請求工具Axios的封裝

接觸vue已經(jīng)很長時間癌刽,也經(jīng)常使用axios悔叽,但是原生封裝的方法都很難滿足日程開發(fā)的需求,所以這期就寫一下axios的封裝躏升。

底部有完整代碼

1.前期準備

創(chuàng)建一個js文件,命名自定狼忱。我這里定義為request.js
import axios from 'axios'  //導入原生的axios 
import qs from 'qs';       //導入qs,做字符串的序列化膨疏,為了后面不同的場景使用一睁。
import {
  MessageBox,
  Message
} from 'element-ui'            //引入element-ui的兩個組件,分別是消息框和消息提示         
import store from '@/store'    //引入狀態(tài)管理倉庫
import router from '@/router'  //引入路由

import {
  getToken
} from '@/utils/auth'          //根據(jù)業(yè)務需求佃却,這個方法是用來獲取Token

2.創(chuàng)建實例

// 創(chuàng)建一個axios實例
const service = axios.create({
  baseURL: 'XXXXXX',         // url = base url + request url
  withCredentials: true,    // 當跨域請求時發(fā)送cookie
  timeout: 15000           // 請求時間
})

3.請求攔截器

在發(fā)送請求之前做些什么
service.interceptors.request.use(
  config => {
    if (store.getters.token) {
    // 讓每個請求攜帶令牌——['Has-Token']作為自定義密鑰者吁。
    // 請根據(jù)實際情況修改。
    config.headers['Has-Token'] = getToken()
    }
    //在這里根據(jù)自己相關的需求做不同請求頭的切換饲帅,我司是需要使用這兩種請求頭复凳。
    if (config.json) {
      config.headers['Content-Type'] = 'application/json'
    } else {
      config.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'
      config.data = qs.stringify(config.data);   //利用qs做json序列化
    }
    return config
  },
  error => {
    // 處理請求錯誤
    console.log(error) // 調試
    return Promise.reject(error)
  }
)

4.響應攔截器

在收到相應后做些什么
service.interceptors.response.use(
  response => {
    const res = response.data    //這是響應返回后的結果
    //在這里可以根據(jù)返回的狀態(tài)碼對存在響應錯誤的請求做攔截,提前做處理灶泵。

    //以下為我司的處理規(guī)則
    // 如果自定義代碼不是200育八,則判斷為錯誤。
    if (res.code == 200 || res.code == 300) {
      // 重新登陸
      MessageBox.confirm('您的登錄狀態(tài)存在問題赦邻,您可以取消以停留在此頁面髓棋,或再次登錄', '系統(tǒng)提示', {
        confirmButtonText: '重新登錄',
        type: 'warning'
      }).then(() => {
        store.dispatch('user/resetToken').then(() => {
          location.reload();
        })
      })
      return
    } else {
      if (res.code == 700) {
        Message.warning('您沒有獲取請求的權限!')
        router.replace({
          path: '/401'
        })
        return
      } else {
        return res
      }
    }
    //end
  },
  error => {
    console.log('err' + error)
    Message({
      message: error.message,
      type: 'error',
      duration: 5 * 1000
    })
    return Promise.reject(error)
  }
)

5.拋出實例

export default service

6.如何調用

//以我司請求為例子
import request from '@/utils/request'

export function getCity(data) {
  return request({
    url: '/getCity/findParentId',
    method: 'post',
    data
  })
}

7.完整代碼

import axios from 'axios'
import qs from 'qs';
import {
  MessageBox,
  Message
} from 'element-ui'
import store from '@/store'
import router from '@/router'
import {
  getToken
} from '@/utils/auth'

// 創(chuàng)建一個axios實例
const service = axios.create({
  baseURL: 'XXXXX', 
  withCredentials: true, 
  timeout: 15000 
})

service.interceptors.request.use(
  config => {
    if (store.getters.token) {
    // 讓每個請求攜帶令牌——['Has-Token']作為自定義密鑰惶洲。
    // 請根據(jù)實際情況修改按声。
    config.headers['Has-Token'] = getToken()
    }
    //在這里根據(jù)自己相關的需求做不同請求頭的切換,我司是需要使用這兩種請求頭恬吕。
    if (config.json) {
      config.headers['Content-Type'] = 'application/json'
    } else {
      config.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'
      config.data = qs.stringify(config.data);   //利用qs做json序列化
    }
    return config
  },
  error => {
    // 處理請求錯誤
    console.log(error) // 調試
    return Promise.reject(error)
  }
)
service.interceptors.response.use(
  response => {
    const res = response.data    //這是響應返回后的結果
    //在這里可以根據(jù)返回的狀態(tài)碼對存在響應錯誤的請求做攔截签则,提前做處理。

    //以下為我司的處理規(guī)則
    // 如果自定義代碼不是200铐料,則判斷為錯誤渐裂。
    if (res.code == 200 || res.code == 300) {
      // 重新登陸
      MessageBox.confirm('您的登錄狀態(tài)存在問題,您可以取消以停留在此頁面钠惩,或再次登錄', '系統(tǒng)提示', {
        confirmButtonText: '重新登錄',
        type: 'warning'
      }).then(() => {
        store.dispatch('user/resetToken').then(() => {
          location.reload();
        })
      })
      return
    } else {
      if (res.code == 700) {
        Message.warning('您沒有獲取請求的權限芯义!')
        router.replace({
          path: '/401'
        })
        return
      } else {
        return res
      }
    }
    //end
  },
  error => {
    console.log('err' + error)
    Message({
      message: error.message,
      type: 'error',
      duration: 5 * 1000
    })
    return Promise.reject(error)
  }
)

export default service

下期編寫一些簡單且常用的正則驗證方法。共勉妻柒!

  • 本人博客地址:https://reinness.com 站點名稱:平凡的你我。 歡迎大家的到來耘分!
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末举塔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子求泰,更是在濱河造成了極大的恐慌央渣,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渴频,死亡現(xiàn)場離奇詭異芽丹,居然都是意外死亡,警方通過查閱死者的電腦和手機卜朗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門拔第,熙熙樓的掌柜王于貴愁眉苦臉地迎上來咕村,“玉大人,你說我怎么就攤上這事蚊俺⌒柑危” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵泳猬,是天一觀的道長批钠。 經(jīng)常有香客問我,道長得封,這世上最難降的妖魔是什么埋心? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮忙上,結果婚禮上拷呆,老公的妹妹穿的比我還像新娘。我一直安慰自己晨横,他們只是感情好洋腮,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著手形,像睡著了一般啥供。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上库糠,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天伙狐,我揣著相機與錄音,去河邊找鬼瞬欧。 笑死贷屎,一個胖子當著我的面吹牛,可吹牛的內容都是我干的艘虎。 我是一名探鬼主播唉侄,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼野建!你這毒婦竟也來了属划?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤候生,失蹤者是張志新(化名)和其女友劉穎同眯,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體唯鸭,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡须蜗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片明肮。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡菱农,死狀恐怖,靈堂內的尸體忽然破棺而出晤愧,到底是詐尸還是另有隱情大莫,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布官份,位于F島的核電站只厘,受9級特大地震影響,放射性物質發(fā)生泄漏舅巷。R本人自食惡果不足惜羔味,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望钠右。 院中可真熱鬧赋元,春花似錦、人聲如沸飒房。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狠毯。三九已至护糖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嚼松,已是汗流浹背嫡良。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留献酗,地道東北人寝受。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像罕偎,于是被迫代替她去往敵國和親很澄。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內容