Axios 是一個(gè)基于 promise 的 HTTP 庫(kù),可以用在瀏覽器和 node.js 中钧栖。
umi-request 阿里開源的請(qǐng)求庫(kù)
Fetch提供了一個(gè) JavaScript 接口,也可以發(fā)請(qǐng)求和響應(yīng)针余。提供了一種簡(jiǎn)單葱绒,合理的方式來(lái)跨網(wǎng)絡(luò)異步獲取資源。(所有ie都不支持门扇,一般用于手機(jī)端)
Axios特性
- 從瀏覽器中創(chuàng)建 [XMLHttpRequests]
- 從 node.js 創(chuàng)建 [http]請(qǐng)求
- 支持 [Promise]API
- 攔截請(qǐng)求和響應(yīng)
- 轉(zhuǎn)換請(qǐng)求數(shù)據(jù)和響應(yīng)數(shù)據(jù)
- 取消請(qǐng)求
- 自動(dòng)轉(zhuǎn)換 JSON 數(shù)據(jù)
- 客戶端支持防御 XSRF
1.為什么 axios 既可以當(dāng)函數(shù)調(diào)用雹有,也可以當(dāng)對(duì)象使用,比如axios({})臼寄、axios.get霸奕。
- axios本質(zhì)是函數(shù),賦值了一些別名方法吉拳,比如get质帅、post方法,可被調(diào)用,最終調(diào)用的還是Axios.prototype.request函數(shù)煤惩。
2.簡(jiǎn)述 axios 調(diào)用流程嫉嘀。
- 實(shí)際是調(diào)用的Axios.prototype.request方法,最終返回的是promise鏈?zhǔn)秸{(diào)用魄揉,實(shí)際請(qǐng)求是在dispatchRequest中派發(fā)的剪侮。
3.攔截器原理是怎樣的?
- 用axios.interceptors.request.use添加請(qǐng)求成功和失敗攔截器函數(shù)洛退,用axios.interceptors.response.use添加響應(yīng)成功和失敗攔截器函數(shù)瓣俯。在Axios.prototype.request函數(shù)組成promise鏈?zhǔn)秸{(diào)用時(shí),Interceptors.protype.forEach遍歷請(qǐng)求和響應(yīng)攔截器添加到真正發(fā)送請(qǐng)求dispatchRequest的兩端兵怯,從而做到請(qǐng)求前攔截和響應(yīng)后攔截彩匕。攔截器也支持用Interceptors.protype.eject方法移除。
4.axios的取消功能是怎么實(shí)現(xiàn)的媒区?
- 通過(guò)傳遞config配置cancelToken的形式驼仪,來(lái)取消的。判斷有傳cancelToken驻仅,在promise鏈?zhǔn)秸{(diào)用的dispatchRequest拋出錯(cuò)誤谅畅,在adapter中request.abort()取消請(qǐng)求,使promise走向rejected噪服,被用戶捕獲取消信息毡泻。
5.為什么支持瀏覽器中發(fā)送請(qǐng)求也支持node發(fā)送請(qǐng)求?
- axios.defaults.adapter默認(rèn)配置中根據(jù)環(huán)境判斷是瀏覽器還是node環(huán)境粘优,使用對(duì)應(yīng)的適配器仇味。適配器支持自定義。