Axios

参考官方文档:Axios 中文文档

AxiosFetch 类似,都是基于 Promise ,用来发送网络求请求的

不同的是,Axios 是基于 Ajax 封装的,而 Fetch 是 ES6 中的原生API(这也是Fetch目前来看唯一优于 Axios 的地方,方便测试)

Fetch 请移步 FetchAPI

发送网络请求

 Axios 提供两种方式发送请求:

import axios from "axios"

  1.配置项

axios(config)

  2.请求方式别名

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]])

配置项

可以向 Axios 传递相关配置来创建请求

// 发起一个post请求
axios({
  method: 'post',
  url: '/user/12345',
  data: {
    firstName: 'Fred',
    lastName: 'Flintstone'
  }
});

详细配置项参考:请求配置 | Axios 中文文档

别名

Axios 提供了一些请求别名的方法,可以直接发送指定别名的请求:

axios.post('/user', {
    firstName: 'Fred',
    lastName: 'Flintstone'
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

Axios 实例

在实际应用中,我们可以通过创建 Axios 实例来自定义默认请求配置:

const instance = axios.create({
// baseURL 将自动加在 url 前面,除非 url 是一个绝对 URL。
// 它可以通过设置一个 baseURL 便于为 axios 实例的方法传递相对 URL
baseURL:
'https://some-domain.com/api/',
// timeout 指定请求超时的毫秒数。
// 如果请求时间超过 timeout 的值,则请求会被中断
timeout:
1000 });

Axios 响应结构

当使用 then 时,将接收如下响应

axios.get('/user/12345')
  .then(function (response) {
    console.log(response.data);
    console.log(response.status);
    console.log(response.statusText);
    console.log(response.headers);
    console.log(response.config);
  });
{
  // `data` 由服务器提供的响应
  data: {},

  // `status` 来自服务器响应的 HTTP 状态码
  status: 200,

  // `statusText` 来自服务器响应的 HTTP 状态信息
  statusText: 'OK',

  // `headers` 是服务器响应头
  // 所有的 header 名称都是小写,而且可以使用方括号语法访问
  // 例如: `response.headers['content-type']`
  headers: {},

  // `config` 是 `axios` 请求的配置信息
  config: {},

  // `request` 是生成此响应的请求
  // 在node.js中它是最后一个ClientRequest实例 (in redirects),
  // 在浏览器中则是 XMLHttpRequest 实例
  request: {}
}

默认配置

可以手动指定或修改默认的配置项,用于全局所有的请求或所有使用该实例的请求

全局 axios 默认值

通过 defaults 属性可以修改全局默认配置项

axios.defaults.baseURL = 'https://api.example.com';
axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

自定义实例默认值

同样通过实例的 defaults 属性修改当前默认配置项

// 创建实例时配置默认值
const instance = axios.create({
  baseURL: 'https://api.example.com'
});

// 创建实例后修改默认值
instance.defaults.headers.common['Authorization'] = AUTH_TOKEN;

配置的优先级

配置将会按优先级进行合并。它的顺序是:显示全局的默认配置项,然后是实例的 defaults 属性,最后是请求的 config 参数。后面的优先级要高于前面的。

错误处理

axios 支持使用 catch 捕获错误

axios.get('/user/12345')
  .catch(function (error) {
    if (error.response) {
      // 请求成功发出且服务器也响应了状态码,但状态代码超出了 2xx 的范围
      console.log(error.response.data);
      console.log(error.response.status);
      console.log(error.response.headers);
    } else if (error.request) {
      // 请求已经成功发起,但没有收到响应
      // `error.request` 在浏览器中是 XMLHttpRequest 的实例,
      // 而在node.js中是 http.ClientRequest 的实例
      console.log(error.request);
    } else {
      // 发送请求时出了点问题
      console.log('Error', error.message);
    }
    console.log(error.config);
  });

 

posted @ 2022-12-25 19:37  邢韬  阅读(63)  评论(0编辑  收藏  举报