当前位置:  首页>> 技术小册>> Vue面试指南

Axios 是一个基于 Promise 的 HTTP 库,可以用于浏览器和 node.js 环境中。它提供了一个易于使用的 API,可以处理请求和响应,并提供了拦截器、取消请求、自动转换 JSON 数据等功能。Axios 的源码比较庞大,可以从以下几个方面进行分析:

创建 Axios 实例:Axios 构造函数返回一个 Axios 实例,这个实例具有默认配置和拦截器等属性,可以通过 Axios.create 方法创建多个实例。Axios 实例有多个方法,例如:request、get、post、put、delete 等。

  1. // 创建一个 Axios 实例
  2. const instance = axios.create({
  3. baseURL: 'https://api.example.com',
  4. timeout: 5000,
  5. headers: { 'Content-Type': 'application/json' }
  6. });

处理请求和响应:Axios 的核心功能是发送 HTTP 请求和处理响应。Axios 发送请求时,会将请求参数和配置合并成一个请求配置对象,然后使用 XMLHttpRequest 或者 XDomainRequest 发送请求。Axios 接收响应后,会根据响应状态码判断请求是否成功,然后调用拦截器处理响应数据。

  1. // 发送 GET 请求
  2. instance.get('/users', {
  3. params: { id: 1 }
  4. }).then(res => {
  5. console.log(res.data);
  6. }).catch(error => {
  7. console.log(error);
  8. });

实现拦截器:Axios 支持请求拦截器和响应拦截器,可以在请求和响应的各个阶段进行一些自定义操作。拦截器是一个数组,每个元素包含两个回调函数,分别是成功回调和失败回调。

  1. // 添加请求拦截器
  2. instance.interceptors.request.use(config => {
  3. // 在发送请求之前做些什么
  4. config.headers.Authorization = 'Bearer ' + localStorage.getItem('token');
  5. return config;
  6. }, error => {
  7. // 处理请求错误
  8. return Promise.reject(error);
  9. });
  10. // 添加响应拦截器
  11. instance.interceptors.response.use(response => {
  12. // 处理响应数据
  13. return response;
  14. }, error => {
  15. // 处理响应错误
  16. return Promise.reject(error);
  17. });

处理取消请求:Axios 支持取消请求,可以在请求发送前或者请求过程中取消请求。取消请求的实现原理是使用一个 cancelToken 标识请求,然后在需要取消请求的地方调用 cancel 方法。

  1. // 创建一个取消请求的 token
  2. const source = axios.CancelToken.source();
  3. // 发送请求
  4. instance.get('/users', {
  5. cancelToken: source.token
  6. }).then(res => {
  7. console.log(res.data);
  8. }).catch(error => {
  9. console.log(error);
  10. });
  11. // 取消请求
  12. source.cancel('取消请求');