前言
上一篇文章分析了dispatchRequest模块以及拦截器模块的功能,知道实际上是调用请求适配器来发送请求的,而adapter是配置在defaults.js模块的。
本篇文章主要分析defaults.js模块中adapter以及其背后的实现。
具体分析
defaults.js模块是默认配置,配置如下:
- adapter
- transformRequest
- transformResponse
- timeout
- maxContentLength
- headers.common
等
本篇主要讲adapter,这是axios实际请求发送的核心,实际上defaults.js中关于其的配置如下:
function getDefaultAdapter() {
var adapter;
if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {
adapter = require('./adapters/http');
} else if (typeof XMLHttpRequest !== 'undefined') {
adapter = require('./adapters/xhr');
}
return adapter;
}
adapter: getDefaultAdapter()
实际上上面的逻辑处理分为两种情况:
- Node.js环境下,引入http.js模块
- 浏览器环境下,引入xhr.js模块
Node.js下使用内置的http模块来实现请求发送
在浏览器环境下就使用XMLHttpRequest来实现请求发送
我们就看下xhr.js模块中相关处理。
xhr模块
上图中就是xhr.js模块中的处理,实际上就是创建XMLHttpRequest对象发送请求以及处理请求头的设置。
总结
至此,axios整个流程梳理完了,中间实际上有一些细节点没有去提及,例如XSRF的问题、相关工具集等,但这些不影响整体流程,只是流程中细节点。
axios整个流程如下: