axios封裝

前言:

? ??????在一開(kāi)始前后臺(tái)交互過(guò)程中旋恼,我們一般都是使用傳統(tǒng)的ajax進(jìn)行交互黄伊,傳統(tǒng)ajax 指的是XMLHttpRequest(XHR),隸屬原生js中戳护,核心使用XMLHttpRequest對(duì)象妇菱,多個(gè)請(qǐng)求之間如果有先后關(guān)系的話顶猜,就會(huì)出現(xiàn)回調(diào)地獄屿讽,往往需要封裝多層回調(diào)方法進(jìn)行數(shù)據(jù)關(guān)系邏輯處理皂冰。

? ? ? ? 隨著時(shí)間的發(fā)展鹊奖,前端流行起來(lái)了angular/vue/react 等等各種前端新的框架邏輯苛聘,使用mvc/mvvm等模式進(jìn)行編程開(kāi)發(fā),然而這個(gè)時(shí)候我們的ajax并不能滿足前端mvvm的浪潮,個(gè)性打包也不能享用cdn的加速處理设哗,這個(gè)時(shí)候在vue2中唱捣,我們的大神尤大大提出使用axios進(jìn)行交互處理。廢話少說(shuō)网梢,這里介紹一下震缭,我對(duì)axios的封裝處理過(guò)程。

? ? ? ? 1.首先為了區(qū)分環(huán)境處理战虏,我們libs下新建 config.js 和ajax.js 兩個(gè)文件拣宰。config中處理我們基礎(chǔ)的環(huán)境配置處理。這些內(nèi)容較為簡(jiǎn)單烦感,可以根據(jù)個(gè)人需求進(jìn)行修改:

? ? ? ? ??

2.ajax中的處理:


import?configURL?from?'./config';

import?router?from?'../route/index'

const?getAjaxUrl?=(url)=>?{

??//?if?(/^https?:\/\/(([a-zA-Z0-9_-])+(\.)?)*(:\d+)?(\/((\.)?(\?)?=?&?[a-zA-Z0-9_-](\?)?)*)*$/i.test(url))?{

??//?????return?configURL.baseURL?+?URL

??//?}

??return?configURL.baseURL?+?url+configURL.urlParams

}

axios.defaults.baseURL?=??''

axios.defaults.timeout=10000

//?請(qǐng)求攔截

axios.interceptors.request.use(

????reqConfig?=>?{

??????//?每次發(fā)送請(qǐng)求之前判斷?localStorage?中是否存在token

??????//?如果存在巡社,則統(tǒng)一在http請(qǐng)求的header都加上token,這樣后臺(tái)根據(jù)token判斷你的登錄情況

??????//?即使本地存在token啸盏,也有可能token是過(guò)期的重贺,所以在響應(yīng)攔截器中要對(duì)返回狀態(tài)進(jìn)行判斷

??????//?const?token?=?localStorage.getItem('token')

??????//?const?token?=?'dbrkon78l4mja4eq2vs8hhl8staio4nj'??//?測(cè)試使用

??????//?const?token?=?''??//?測(cè)試使用??

??????//?token?&&?(reqConfig.headers['X-WX-Token']?=?token)

??????//?reqConfig.params?&&?(reqConfig.params.qrId?=?46);

??????return?reqConfig;

????},

????reqError?=>?{

??????return?Promise.reject(reqError)

????}

??)


??//?響應(yīng)攔截? ?每個(gè)公司code返回?cái)?shù)據(jù)格式請(qǐng)求都不相同,根據(jù)個(gè)人需求自行調(diào)整

??axios.interceptors.response.use(

????resData?=>?{

??????//?如果返回的狀態(tài)碼為200回懦,說(shuō)明接口請(qǐng)求成功气笙,可以正常拿到數(shù)據(jù)

??????//?否則的話拋出錯(cuò)誤

??????if?(resData.status?===?200)?{

????????const?resultNum?=??resData.data.code;

????????switch?(resultNum)?{

??????????case?0:

??????????????return?Promise.resolve(resData.data);

??????????case?500:

??????????????return?Promise.resolve(resData.data);

????????}

??????}?else?{

????????return?Promise.reject(resData.data);

??????}

????},

????resError?=>?{

??????return?Promise.reject(resError);

????}

??)


??/**

???*?GET?請(qǐng)求

???*?@param?{?String?}?url????請(qǐng)求地址

???*?@param?{?Object?}?params???參數(shù)對(duì)象

???*?@param?{?Object?}?config???配置對(duì)象

???*?@param?{?Function?}?errCallback???回調(diào)函數(shù)

???*/

??export?const?$get?=?(url?=?'',?params?=?{},?config?=?{},?errCallback?=?null)?=>?{

????//?const?_config?=?Object.assign({

????//???headers:?{

????//?????'qrCode':?sessionStorage.getItem('code')?||?''

????//???}

????//?},?config);

????//?if(sessionStorage.getItem('code')){

????//???params?=?_config.headers

????//?}

????return?axios.get(getAjaxUrl(url),?{params},?config).then(res?=>?{

??????return?res;

????}).catch(err?=>?{

??????errCallback?&&?errCallback();

??????return?err;

????})

??}


??/**

???*?POST?請(qǐng)求

???*?@param?{?String?}?url????請(qǐng)求地址

???*?@param?{?Object?}?params???參數(shù)對(duì)象

???*?@param?{?Object?}?config???配置對(duì)象

???*?@param?{?Function?}?errCallback???回調(diào)函數(shù)

???*/

??export?const?$post?=?(url?=?'',?params?=?{},?config?=?{},?errCallback?=?null)?=>?{

????const?_config?=?Object.assign({

??????headers:?{

????????'Content-Type':?'application/x-www-form-urlencoded'

??????},

????},?config);


????let?resultParams;

????if?(_config.headers['Content-Type'].toLowerCase().indexOf('json')?>?-1)?{

??????resultParams?=?params;

????}?else?{

??????resultParams?=?params;

????}

????return?axios.post(getAjaxUrl(url)+'?qrCode='+sessionStorage.getItem('code'),?resultParams,?_config).then(res?=>?{

??????console.log(res)

??????return?res;

????}).catch(err?=>?{

??????errCallback?&&?errCallback();

??????return?err;

????})

??}


之后 我們?cè)赼pi的文件中進(jìn)行調(diào)用使用

import?{?$get?,$post}?from?'@/libs/ajax.js';

例微信接口處理 get請(qǐng)求

const getWxConfig?=?(data?=?{})?=>?{

????return?$get(

??????'/apiStk/wx/weixin',

??????Object.assign({},?data)

????)

??}


const? saveStkQrDetail?=?(data?=?{})?=>?{

??return?$post(

??????'/apiStk/make/saveStkQrDetail',

??????Object.assign({},data),

??????{

??????????headers:?{

????????????'Content-Type':?'application/json'

??????????}

??????}

??)

}

??export?{

? ? getWxConfig,

??}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市怯晕,隨后出現(xiàn)的幾起案子潜圃,更是在濱河造成了極大的恐慌,老刑警劉巖舟茶,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谭期,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡吧凉,警方通過(guò)查閱死者的電腦和手機(jī)隧出,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)阀捅,“玉大人胀瞪,你說(shuō)我怎么就攤上這事∷潜桑” “怎么了凄诞?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)忍级。 經(jīng)常有香客問(wèn)我帆谍,道長(zhǎng),這世上最難降的妖魔是什么轴咱? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任汛蝙,我火速辦了婚禮烈涮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘患雇。我一直安慰自己跃脊,他們只是感情好宇挫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布苛吱。 她就那樣靜靜地躺著,像睡著了一般器瘪。 火紅的嫁衣襯著肌膚如雪翠储。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,155評(píng)論 1 299
  • 那天橡疼,我揣著相機(jī)與錄音援所,去河邊找鬼。 笑死欣除,一個(gè)胖子當(dāng)著我的面吹牛住拭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播历帚,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼滔岳,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了挽牢?” 一聲冷哼從身側(cè)響起谱煤,我...
    開(kāi)封第一講書(shū)人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎禽拔,沒(méi)想到半個(gè)月后刘离,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡睹栖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年硫惕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片野来。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡恼除,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出梁只,到底是詐尸還是另有隱情缚柳,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布搪锣,位于F島的核電站秋忙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏构舟。R本人自食惡果不足惜灰追,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧弹澎,春花似錦朴下、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至佩迟,卻和暖如春团滥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背报强。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工灸姊, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人秉溉。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓力惯,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親召嘶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子父晶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

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

  • 1.1axios二次封裝 import axios from 'axios' import router from...
    Nicholas_liang閱讀 760評(píng)論 3 7
  • http.js // 在http.js中引入axios import axios from 'axios'; //...
    hibigger閱讀 493評(píng)論 0 0
  • /** * 封裝get方法 * @param url * @param params * @returns {Pr...
    9664e82e9bfe閱讀 549評(píng)論 0 0
  • 一個(gè)APP里面少不了網(wǎng)絡(luò)請(qǐng)求,與服務(wù)端進(jìn)行數(shù)據(jù)交互苍蔬,在公司項(xiàng)目中用到了axios這個(gè)組件诱建,使用很方便,分享下使用情...
    湖北的白閱讀 18,456評(píng)論 2 17
  • 一碟绑、axios的封裝 在vue項(xiàng)目中俺猿,和后臺(tái)交互獲取數(shù)據(jù)這塊,我們通常使用的是axios庫(kù)格仲,它是基于promise...
    FE_study閱讀 575評(píng)論 0 1