前后端數據交互(五)——什么是 axios?


一、什么是 axios ?

axios是基於 Promise 的 ajax 封裝庫,也是前端目前最流行的 ajax 請求庫。簡單地說發送 get、post 請求,是一個輕量級的庫,使用時可直接引入。

二、axios 的特點

  1. 異步的 ajax 請求庫。
  2. 在瀏覽器端和 node 端都可以使用。
  3. 支持 Promise API。
  4. 支持請求和響應攔截。
  5. 響應數據自動轉換 JSON 數據。
  6. 支持請求取消。
  7. 可以批量發送多個請求。
  8. 客戶端支持安全保護,免受 XSRF 攻擊。

三、axios API

3.1、安裝

復制代碼
/* npm 安裝 */
npm install axios --save

/* bower 安裝 */
bower install axios

/* 使用 yarn */
yarn add axios

/* cdn 引入 */
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
復制代碼

 

注:如果簡單靜態頁面使用,建議cdn方式引入。

3.2、axios API

向 axios 傳輸相關配置參數,創建請求。如:axios(config)

復制代碼
/* 如發送一個post請求的配置參數如下 */
axios({
 method: 'post', //請求方法
 url: '/user/12345', //訪問接口
 data: { //傳輸數據
  firstName: 'Fred',
  lastName: 'Flintstone'
 }
});
/* 如發送一個get請求的配置參數如下 */
axios({
  method: 'get',
  url: 'http://localhost:80/one',//請求接口
  responseType: 'stream'//響應形式
})
  .then(function (response) {
    response.data.pipe(fs.createWriteStream('save.jpg')) //保存圖片
  });
復制代碼

 

3.3、axios 請求方法

上邊axios API 每發起一個請求,都需要設置它的請求方法和響應頭超時等信息,使用起來比較繁瑣,為了方便,axios 為所有支持的請求方法提供了別名,可直接指定方式發起請求,其他參數可通過全局設置。如:

axios('/user/id=1');

上述 axios 直接發送請求,不設置請求方式時,默認使用 get 請求,與 ajax 和 fetch 相同。所以發送的是一個get請求,也可以使用 get 方法發送,如下實例:

復制代碼
axios.get( 
  '1.txt' , 
  {
   params:{id:'1'}
  }
).then(res=>{
  console.log(res);
 })
 .catch(err=>{
 console.log(err);
})
復制代碼

 

可簡寫成 axios(url,config)。

具體的其他方法分別為:

axios.request(config) axios.get( url , config) axios.delete( url , config) axios.head( url , config) axios.options( url , config) axios.post( url [,data [, config ]]) axios.put( url [,data [, config ]]) axios.patch( url [,data [, config ]])

3.4、批量發送請求

網絡請求中往往會有多個網絡請求並發執行,有時需要統一處理它們返回結果,所以axios有並發處理。axios.all()可以並行發送多個網絡請求,等待請求都返回之后,繼續處理。

使用語法:

復制代碼
/* 第一種處理方式 */
axios.all([
 axios.get(URL1),
 axios.get(URL2),
]).then(res=>{
    console.log(res) //返回的res是一個數組,res[0]是第一個請求數據 res[1]是第二個請求數據
})

/* 第二種處理方式 */
axios.all([
 axios.get(URL1),
 axios.get(URL2),
]).then(
 axios.spread((res1,res2)=>{
   res1 //是第一個請求返回數據
   res2 //是第二個請求返回數據
  })
)
復制代碼

 

使用 axios.spread 能夠自動分割請求返回數據。

1.5、全局默認配置

全局默認配置主要作用於每個請求。既節省敲代碼的時間,想修改的時候,只需修改一個就可以全部修改掉。

常見的全局默認配置有:

復制代碼
axios.defaults.baseURL = "http://localhost:8080/" //配置域名
axios.defaults.timeout = 6000; //單位是毫秒,設置超時時間

/* 頭設置 */
axios.defaults.headers.common['Authorization'] = AUTH_TOKEN
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'
復制代碼

 

3.6、axios 實例

復制代碼
// 實例化的時候配置默認參數
const instance = axios.create({
  baseURL: 'https://api.example.com'
});

// Alter defaults after instance has been created
instance.defaults.headers.common['Authorization'] = AUTH_TOKEN
復制代碼

 

之所以使用 axios 實例化,是因為全局實例化 http 請求有全局的響應攔截,當我們某些接口無法返回狀態碼時,我們將無法得到 response,此時我們需要在當前 api 中重新實例化一個 axios,設置新的響應攔截碼。

3.7、攔截器

攔截器分為兩個,有請求攔截和響應攔截,可以統一處理某些業務。

  • 請求攔截器:
復制代碼
/* 
請求攔截器
統一在發送請求之前添加token
*/
axios.interceptors.request.use(config=>{
 config.headers.token = sessionStorage.getItem("token") //添加toke
  return config
},err=>{
 console.log(err)//請求錯誤
})
復制代碼

 

  • 響應攔截器
axios.interceptors.response.use(response=>{
  return response
},err=>{
 console.log(err)//響應錯誤
})

 

3.8、響應內容

基本使用中,第一個實例請求成功,打印結果 console.log(res) 。返回結果如下:

{
  data:{}, status:200, //從服務器返回的http狀態文本 statusText:'OK', //響應頭信息 headers: {}, //config是在請求的時候的一些配置信息 config: {} }

四、axios 常見應用

axios既可以在瀏覽器端使用,也可以在node.js中使用。在瀏覽器端發送的是XMLHttpRequest,在 node.js 發送的是 http 。像VUE、React、Node等項目都可以使用axios。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM