从xhr到axios源码分析(四)

最近有点忙,所以很久没有更新了。
今天我们来说axios的源码,既然说到源码,首先我们得先去下载一份源码.
我们先看目录

  • /dist/ --------------------------------- 项目输出目录
  • /lib/ -----------------------------------项目源码目录
    • /adapters/ -------------------------定义请求配置器(xhr,http)
      • https.js ---------------------------实现http适配器
      • xhr.js ------------------------------实现xhr适配器
    • /cancel/ -----------------------------定义取消功能
    • /core/ --------------------------------一些核心功能
    • Axios.js -----------------------------axios的核心
    • dispatchRequest.js --------------用来调用http请求适配器方法发送请求的函数
    • interceptorManager.js -----------拦截器的管理器
    • settle.js ------------------------------根据http响应状态,改变Promise的状态
    • /helpers/ -----------------------------一些辅助的方法
    • axios.js ------------------------------外界使用的axios方法
    • defaults.js --------------------------axios的默认配置
    • utils.js -------------------------------公用的工具
    • package.json ----------------------项目信息
    • index.d.ts ---------------------------配置ts声明文件
    • index.js ------------------------------入口文件

我们主要来说lib下的文件,这里边是我们真正发送请求用到的文件
在这里插入图片描述
xhr.js主要是用来发送请求的文件。这里就用到了我们之前说的创建一个xhr对象
http.js 主要是用来在服务器端发送请求的文件。所以说axios既可以在浏览器端发动请求又可以在服务器端发送请求。

adapters/xhr.js

xhr.js向外暴露了一个xhrAdaper方法,这个方法return了一个promise方法
在这里插入图片描述

cancel

1.cancel.js

用于取消请求。
如果取消请求会有一个error返回,这个返回值就是这里边的cancel()。

2.iscancel.js

用于判断返回来的error是不是一个cancel类型
在这里插入图片描述

3.cancelToken.js

在这里插入图片描述

源码分析

1.axios与Axios的关系
1)从语法上来说:axios不是Axios的实例
2)从功能上来说:axios是Axios的实例
3)axios是Axios.prototype.request函数bind()返回的属性
4)axios作为对象有Axios原型上的所有方法,有Axios上的所有属性
在这里插入图片描述 2.instance与axios的区别 1)相同 (1)同时一个能发任意请求的函数 (2)都能发特定的请求get()/post()/delete()/request() (3)都有默认配置和拦截器的属性defaults/interceptors 2)不同 (1)默认匹配的值很可能不一样 (2)instance没有axios后边添加的一下方法:create()/CancelToken()/all()