axios和fetch小结

729 阅读2分钟

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。

引入官方解释


下面来看看代码规范

// 为给定 ID 的 user 创建请求
axios.get('/user?ID=12345') 
.then(function (response) {console.log(response);})
.catch(function (error) {console.log(error)});

fetch

Fetch API 提供了一个 JavaScript接口,用于访问和操纵HTTP管道的部分,例如请求和响应。它还提供了一个全局 fetch()方法,该方法提供了一种简单,合理的方式来跨网络异步获取资源。这种功能以前是使用 XMLHttpRequest实现的。

小拓展


、fetch优势:

  1. 语法简洁,更加语义化
  2. 基于标准 Promise 实现,支持 async/await
  3. 同构方便,使用 isomorphic-fetch
  4. 更加底层,提供的API丰富(request, response)
  5. 脱离了XHR,是ES规范里新的实现方式

代码规范

fetch('http://example.com/movies.json')
  .then(function(response) {
    return response.json();
  })
  .then(function(myJson) {
    console.log(myJson);
  });

这里我们通过网络获取一个JSON文件并将其打印到控制台。最简单的用法是只提供一个参数用来指明想fetch()到的资源路径,然后返回一个包含响应结果的promise(一个 Response 对象)。

当然它只是一个 HTTP 响应,而不是真的JSON。为了获取JSON的内容,我们需要使用 json()方法。

下面整理的几点区别:

1.Axios在发送请求时自动 stringify 数据(尽管你可以覆盖默认行为并定义不同的转换机制)。但是,在使用 fetch()时,你必须手动完成。

2.要同时发出多个请求,Axios提供了 axios.all()方法。只需将一个请求数组传递给这个方法,然后使用axios.spread()将响应数组的属性分配给多个变量:

3.常用axios拦截器

在Axios中声明请求拦截器:

axios.interceptors.request.use(config => {
  // log a message before any HTTP request is sent
  console.log('Request was sent');

  return config;
});

// sent a GET request
axios.get('https://api.github.com/users/sideshowbarker')
  .then(response => {
    console.log(response.data);
  });