axios快速上手(簡單使用)

axios對ajax請求進行了封裝,并且使用promise的鏈式調用使得網絡請求的代碼邏輯更為清晰暇务,同時支持async和await的編寫方式使代碼看起來像同步,更加方便于理解和閱讀。axios這個庫的體積也不大兄墅,先在項目里進行安裝,npm i axios --save澳叉,然后引入就可以直接使用。

import axios from 'axios';

axios({
  url: 'https://httpbin.org/post',
  method: 'post', // 默認為get
  data: {        // post請求傳遞參數用data, get請求傳遞參數用params
     name: 'macus',
     age: 18 
  }
}).then(value=>{
    // 獲取請求成功的結果
    console.log(value)
}).catch(error=>{
    // 獲取請求發(fā)送失敗的結果
    console.log('error', error)
})

以下圖片是axios的成功響應返回的結果沐悦,可以看到返回的信息非常的多成洗,其中data是服務器真正返回的內容,而其它的信息全都是axios提供的藏否,其中包括請求的配置config瓶殃,頭部信息headers,XMLHttpRquest的響應狀態(tài)


axios響應結果.png

axios還提供了很多的API用于發(fā)送不同的網絡請求副签,以上請求還可以寫成以下形式遥椿,這樣就不用寫method屬性,更為簡潔一些

axios.post('https://httpbin.org/get', {
    name: 'macus',
    age: 18
})

還有很多其它的API

axios.get / axios.put / axios.delete / axios.request

雖然api的名字不同淆储,其實這些api全都是調用的axios.request方法冠场,以下為axios源碼,可以看到都是調用的Axios.prototype.request


axios源碼.png

一般來說本砰,業(yè)務的網絡請求地址的域名都是固定的碴裙,可以在發(fā)送請求時定義一個baseURL

// 發(fā)送請求時定義baseURL
axios({
  baseURL: 'https://httpbin.org',
  url: '/post',
  method: 'post', // 默認為get
  data: {
    name: 'macus',
     age: 18
  }
})

每一個請求都定義一個baseURL使得代碼冗余,這里可以在全局的配置項里進行定義

// 通過axios.defaults進行全局配置
axios.defaults.baseURL = 'https://httpbin.org'

axios({
  url: '/post',
  method: 'post', // 默認為get
  data: {
     name: 'macus',
     age: 18
  }
})

當有多個域名用于網絡請求時,定義一個默認全局的baseURL就明顯不夠用了舔株,axios提供了自定義實例的方式莺琳,我們可以通過axios.create定義多個實例用于配置不同類型的網絡請求,定義之后發(fā)送網絡請求方式與通過axios這個實例對象去調用一致

const instance = axios.create({
   baseURL: 'https://httpbin.org'
})

instance.get('/get', {
   params: {
      name: 'macus'
   }
})

有時候载慈,我們想對請求和響應做一些統一的處理惭等,比如發(fā)送請求的時候展示加載的動畫、檢查請求參數中有沒有攜帶token办铡,如果沒有就需要用戶登錄辞做,再比如,響應報文返回的數據項太多料扰,而我們只需要服務器返回的數據就行凭豪,那么這個時候,可以使用攔截器來對請求和響應進行通用的處理晒杈,這里再使用上面創(chuàng)建的instance實例對象嫂伞。

// 對請求進行攔截,分別傳入請求成功和失敗的處理函數
instance.interceptors.request.use(config=>{ 
    // 可以在這里進行一些邏輯處理
    console.log('請求攔截了', config)
    // config為請求的配置項信息拯钻,必須要有請求報文的返回
    return config
}, error=>{
    // 處理請求失敗
})

// 對響應進行攔截帖努,分別傳入響應成功和失敗的處理函數
instance.interceptors.response.use(result=>{
    console.log('響應攔截了',result)
    // result為響應信息,必須將響應報文進行返回
   // 只需要服務器返回的data數據粪般,可直接返回data
    return result.data
}拼余,error=>{
    // 失敗時的處理方式,如 404 500 等
})
axios攔截器的請求和響應參數.png

目前每發(fā)送一個網絡請求亩歹,都需要調用axios的實例匙监,假如有一天這個庫有bug,或者后續(xù)將項目進行優(yōu)化小作,想使用別的庫亭姥,那么有100處發(fā)送了網絡請求,這100處都需要修改顾稀,這樣代碼的可維護性變得比較差达罗,為了解決這樣的問題,我們可以自行進行一個封裝静秆,每發(fā)送網絡請求粮揉,都使用我們自定義的函數,這樣后續(xù)即使想換成別的庫抚笔,直接修改我們封裝的函數就行扶认,下面做一個簡單封裝的演示

// ajaxRequest.js
import axios from 'axios'
const instance = axios.create({
  baseURL: 'https://httpbin.org',
  timeout: 5000 // 超時時間
})
export function requestPost(url, data, successCallback, errorCallback){
  instance({
    url,
    data,
    method: 'post'
  }).then(successCallback)
  .catch(errorCallback)
}

//調用的頁面
import { requestPost} from './ajaxRequest'
requestPost('/post', {name: 'kiki'}, result=>{
   console.log('成功了',result)
},error=>{
   console.log('失敗了',error)
})

以上就是axio的快速上手使用~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市塔沃,隨后出現的幾起案子蝠引,更是在濱河造成了極大的恐慌阳谍,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件螃概,死亡現場離奇詭異矫夯,居然都是意外死亡,警方通過查閱死者的電腦和手機吊洼,發(fā)現死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門训貌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人冒窍,你說我怎么就攤上這事递沪。” “怎么了综液?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵款慨,是天一觀的道長。 經常有香客問我谬莹,道長檩奠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任附帽,我火速辦了婚禮埠戳,結果婚禮上,老公的妹妹穿的比我還像新娘蕉扮。我一直安慰自己整胃,他們只是感情好,可當我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布喳钟。 她就那樣靜靜地躺著屁使,像睡著了一般。 火紅的嫁衣襯著肌膚如雪奔则。 梳的紋絲不亂的頭發(fā)上屋灌,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天,我揣著相機與錄音应狱,去河邊找鬼。 笑死祠丝,一個胖子當著我的面吹牛疾呻,可吹牛的內容都是我干的。 我是一名探鬼主播写半,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼岸蜗,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了叠蝇?” 一聲冷哼從身側響起璃岳,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后铃慷,有當地人在樹林里發(fā)現了一具尸體单芜,經...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年犁柜,在試婚紗的時候發(fā)現自己被綠了洲鸠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡馋缅,死狀恐怖扒腕,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情萤悴,我是刑警寧澤瘾腰,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站覆履,受9級特大地震影響蹋盆,放射性物質發(fā)生泄漏。R本人自食惡果不足惜内狗,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一怪嫌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧柳沙,春花似錦岩灭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至数初,卻和暖如春找爱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背泡孩。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工车摄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人仑鸥。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓吮播,卻偏偏與公主長得像,于是被迫代替她去往敵國和親眼俊。 傳聞我的和親對象是個殘疾皇子意狠,可洞房花燭夜當晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內容