2020-01-11 axios的基本使用

axios的基本使用

安裝axios馁启,因?yàn)檫\(yùn)行時(shí)也要用到所以是--save
npm install axios --save

axios支持多種請(qǐng)求方式:
axios(config)
axios.request(config)
axios.get(url[, config])
axios.delete(url[, config])
axios.head(url[, config])
axios.post(url[, data[, config]])
axios.put(url[, data[, config]])
axios.patch(url[, data[, config]])

發(fā)送get請(qǐng)求演示

在任意的js文件中都可以用

import axios from 'axios'
axios({
})
//傳入config對(duì)象

例如:

axios({
  url: 'lalalala/home/multidata'
}).then(res=>{
  console.log(res);
})

axios返回的是promise對(duì)象晴裹,可以直接調(diào)用then方法政钟,獲得請(qǐng)求到的數(shù)據(jù)。

axios發(fā)送并發(fā)請(qǐng)求

有時(shí)候, 我們可能需求同時(shí)發(fā)送兩個(gè)請(qǐng)求
使用axios.all, 可以放入多個(gè)請(qǐng)求的數(shù)組.
axios.all([]) 返回的結(jié)果是一個(gè)數(shù)組差油,使用 axios.spread 可將數(shù)組 [res1,res2] 展開(kāi)為 res1, res2

同時(shí)請(qǐng)求完多個(gè)url再返回:

axios.all([axios({
        url: 'http://lalalala/home/multidata'
    }
), axios({
    url: 'http://lalalala/home/multidata',
    params: {
        type: 'sell',
        page: 5
    }
})]).then(res => {
    console.log(res);
}))

第二個(gè)請(qǐng)求的res是一個(gè)數(shù)組:

(2) [{…}, {…}]
0: {data: {…}, status: 200, statusText: "OK", headers: {…}, config: {…}, …}
1: {data: {…}, status: 200, statusText: "OK", headers: {…}, config: {…}, …}
length: 2
__proto__: Array(0)

axios.spread()方法

axios.all([axios({
        url: 'http://lalalala/home/multidata'
    }
), axios({
    url: 'http://lalalala/home/multidata',
    params: {
        type: 'sell',
        page: 5
    }
})]).then(axios.spread((res1, res2) => {
    console.log(res1);
    console.log(res2);
}))

log出

Object
data: {data: {…}, returnCode: "SUCCESS", success: true}
status: 200
statusText: "OK"
headers: {content-length: "4605", content-type: "application/json"}
config: {url: "http://lalala", headers: {…}, transformRequest: Array(1), transformResponse: Array(1), timeout: 0, …}
request: XMLHttpRequest {readyState: 4, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, onreadystatechange: ?, …}
__proto__: Object

全局配置

在開(kāi)發(fā)中可能很多參數(shù)都是固定的.
這個(gè)時(shí)候我們可以進(jìn)行一些抽取, 也可以利用axiox的全局配置

axios.defaults.baseURL = ‘lalalala:8000’?
axios.defaults.headers.post[‘Content-Type’] = ‘a(chǎn)pplication/x-www-form-urlencoded’;

例如:

axios.defaults.baseURL='http://lalalala:8000'
axios.defaults.timeout=5000

axios.all([axios({
        url: 'http://lalalala:8000/home/multidata'
    }
), axios({
    url: 'http://lalalala:8000/api/hy/home/multidata',
    params: {
        type: 'sell',
        page: 5
    }
})]).then(res => {
  console.log(res);
})

常見(jiàn)配置:
請(qǐng)求地址
url: '/user',
請(qǐng)求類(lèi)型
method: 'get',
請(qǐng)根路徑
baseURL: 'http://www.mt.com/api',
請(qǐng)求前的數(shù)據(jù)處理
transformRequest:[function(data){}],
請(qǐng)求后的數(shù)據(jù)處理
transformResponse: [function(data){}],
自定義的請(qǐng)求頭
headers:{'x-Requested-With':'XMLHttpRequest'},
URL查詢對(duì)象
params:{ id: 12 },
查詢對(duì)象序列化函數(shù)
paramsSerializer: function(params){ }
request body
data: { key: 'aa'},
超時(shí)設(shè)置s
timeout: 1000,
跨域是否帶Token
withCredentials: false,
自定義請(qǐng)求處理
adapter: function(resolve, reject, config){},
身份驗(yàn)證信息
auth: { uname: '', pwd: '12'},
響應(yīng)的數(shù)據(jù)格式 json / blob /document /arraybuffer / text / stream
responseType: 'json',

axios的實(shí)例

當(dāng)我們從axios模塊中導(dǎo)入對(duì)象時(shí), 使用的實(shí)例是默認(rèn)的實(shí)例.
當(dāng)給該實(shí)例設(shè)置一些默認(rèn)配置時(shí), 這些配置就被固定下來(lái)了.
但是后續(xù)開(kāi)發(fā)中, 某些配置可能會(huì)不太一樣.
比如某些請(qǐng)求需要使用特定的baseURL或者timeout或者content-Type等.
這個(gè)時(shí)候, 我們就可以創(chuàng)建新的實(shí)例, 并且傳入屬于該實(shí)例的配置信息.

每一個(gè)實(shí)例都有獨(dú)立的配置

// 創(chuàng)建對(duì)應(yīng)的axios實(shí)例
const instance1 = axios.create({
    baseURL: 'http://lalalala:8000',
    timeout: 5000
})

const instance2 = axios.create({
    baseURL: 'http://lalaland:8000/',
    timeout: 5000
})

instance1({
    url: '/home/multidata'
}).then(res => {
    console.log(res);
})

instance2({
    url: '/home/data',
    params: {
        type: 'sell',
        page: 5
    }
}).then(res => {
    console.log(res);
})

axios封裝

如果不封裝起來(lái)抖誉,在每個(gè)組件中都import axios,一個(gè)頁(yè)面有無(wú)數(shù)個(gè)組件钦奋,如果要換依賴座云,每個(gè)都要一個(gè)一個(gè)改會(huì)很麻煩。
因此不要在每個(gè)組件里面對(duì)第三方有依賴付材!最好是自己封裝一個(gè)朦拖,每次都調(diào)自己的。

新建network文件夾厌衔,放關(guān)于網(wǎng)絡(luò)層的東西璧帝。
request.js

axios提供的攔截器

攔截器用于我們?cè)诎l(fā)送每次請(qǐng)求或者得到相應(yīng)后,進(jìn)行對(duì)應(yīng)的處理富寿。

  1. 請(qǐng)求攔截request
    請(qǐng)求攔截中錯(cuò)誤攔截較少睬隶,通常都是配置相關(guān)的攔截
    可能的錯(cuò)誤比如請(qǐng)求超時(shí),可以將頁(yè)面跳轉(zhuǎn)到一個(gè)錯(cuò)誤頁(yè)面中页徐。
  2. 響應(yīng)攔截
    響應(yīng)攔截中完成的事情:
    響應(yīng)的成功攔截中苏潜,主要是對(duì)數(shù)據(jù)進(jìn)行過(guò)濾。
    響應(yīng)的失敗攔截中变勇,可以根據(jù)status判斷報(bào)錯(cuò)的錯(cuò)誤碼恤左,跳轉(zhuǎn)到不同的錯(cuò)誤提示頁(yè)面。

攔截之后記得return

這就是傳說(shuō)中的aop搀绣?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末飞袋,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子链患,更是在濱河造成了極大的恐慌巧鸭,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件麻捻,死亡現(xiàn)場(chǎng)離奇詭異蹄皱,居然都是意外死亡览闰,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)巷折,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)压鉴,“玉大人,你說(shuō)我怎么就攤上這事锻拘∮涂裕” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵署拟,是天一觀的道長(zhǎng)婉宰。 經(jīng)常有香客問(wèn)我,道長(zhǎng)推穷,這世上最難降的妖魔是什么心包? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮馒铃,結(jié)果婚禮上柳畔,老公的妹妹穿的比我還像新娘奈懒。我一直安慰自己蚕键,他們只是感情好毅舆,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著议谷,像睡著了一般炉爆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上卧晓,一...
    開(kāi)封第一講書(shū)人閱讀 49,185評(píng)論 1 284
  • 那天芬首,我揣著相機(jī)與錄音,去河邊找鬼逼裆。 笑死郁稍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的波附。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼昼钻,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼掸屡!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起然评,我...
    開(kāi)封第一講書(shū)人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤仅财,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后碗淌,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體盏求,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡抖锥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了碎罚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片磅废。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖荆烈,靈堂內(nèi)的尸體忽然破棺而出拯勉,到底是詐尸還是另有隱情,我是刑警寧澤憔购,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布宫峦,位于F島的核電站,受9級(jí)特大地震影響玫鸟,放射性物質(zhì)發(fā)生泄漏导绷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一屎飘、第九天 我趴在偏房一處隱蔽的房頂上張望妥曲。 院中可真熱鬧,春花似錦枚碗、人聲如沸逾一。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)遵堵。三九已至,卻和暖如春怨规,著一層夾襖步出監(jiān)牢的瞬間陌宿,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工波丰, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留壳坪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓掰烟,卻偏偏與公主長(zhǎng)得像爽蝴,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子纫骑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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