入口文件之axios.js
axios的入口文件。主要功能:
- createInstance创建axios实例。
- axios.create方法允许用户创建多个axios实例同时允许继承。
- axios.Cancel、axios.CancelToken、axios.isCancel用于控制取消网络请求
- axios.all 用于发送多个网络请求,实际使用了Promise.all
- axios.spread 将多个参数合并成数组执行,可使用延展语法代替,配合axios.all使用
axios默认配置文件defaults.js
此文件中主要需注意getDefaultAdapter方法,该方法主要是设置axios的网络请求模块,在浏览器环境下使用XMLHttpRequest模块,node模式下使用http模块。
实用工具集utils.js
主要封装了一些常用的工具函数。
adapters目录下http.js
node模式下使用http网络请求模块。使用Promise进行了一层封装。主要功能:
- 设置User-Agent(可选)
- 处理请求数据
- HTTP基本身份验证(可选)
- 解析url并处理成绝对路径
- 设置代理(可选)
- 创建请求对象
- 监听请求错误
- 处理请求超时(可选)
- 监听请求取消(可选)
adapters目录下xhr.js
浏览器模式下使用XMLHttpRequest。同样的也使用了Promise进行封装。主要功能:
- HTTP基本身份验证
- 解析url并处理成绝对路径
- 监听网络请求是否就绪
- 处理浏览器请求取消的情况(与手动取消相反)
- 处理底层网络错误
- 添加xsrf标头
- 添加请求头
- 添加withCredentials进行请求(如果需要)
- 设置响应类型(可选)
- 监听文件下载进度(可选,下载可用)
- 监听文件上传进度(可选,文件上传可用)
- 监听请求取消(可选)
cancel目录下Cancel.js
一个Cancel类,用于取消请求时使用,包含message字段。主要功能:
- 重写了toString方法
- 函数原型上添加了__CANCEL__属性,默认为true
cancel目录下CancelToken.js
一个CancelToken类,用于取消请求时使用。主要功能:
- 包装一个执行器生成token
- 包含throwIfRequested方法,用于处理请求取消的情况。
cancel目录下isCancel.js
判断请求是否取消。
core目录下Axios.js
声明一个Axios类,同时通过构造方法设置axios配置和初始化请求拦截器和响应拦截器。
包含request、getUri、get、delete、head、options、post、put和patch方法。
core目录下buildFullPath.js
将相对路径组合成绝对路径。
core目录下createError.js
使用指定的消息,配置,错误代码,请求和响应创建错误信息。
core目录下dispatchRequest.js
使用配置的适配器,即网络请求模块进行网络请求。在进行网络请求之前,先判断是否已经取消了网路请求,如果没有,就进行转换请求数据,合并请求头等操作;然后再进行网络请求;最后转换响应数据。
core目录下enhanceError.js
使用指定的消息,配置,错误代码,请求和响应格式化错误信息。
core目录下InterceptorManager.js
拦截器管理类,包含三个方法:分别是use方法——添加拦截器,eject方法——移除拦截器,forEach方法——遍历并调用拦截器。
core目录下mergeConfig.js
用于axios配置文件合并。
core目录下settle.js
根据响应结果执行Promise.resolve或者Promise.reject。
core目录下transformData.js
转换请求或响应数据。
helpers目录下bind.js
实现函数绑定执行上下文,即this对象。
helpers目录下buildURL.js
序列化参数,并拼接到URL。
helpers目录下combineURLs.js
通过baseURL和相对URL组合形成一个新的URL。
helpers目录下cookies.js
cookies模块,只有在浏览器环境存在,实现read、write、remove三个函数;其他环境不需要,实现read、write、remove三个空函数,防止调用报错。
helpers目录下isAbsoluteURL.js
判断是否为绝对路径。
helpers目录下isURLSameOrigin.js
判断URL是否同源,非标准浏览器环境 (web workers, react-native) 不支持支持,直接返回true。
helpers目录下normalizeHeaderName.js
标准化请求头,删除不需要的请求头字段。
helpers目录下parseHeaders.js
转化成一个标准的请求头对象。
helpers目录下spread.js
将多个参数转化为一个数组执行。