axios源码解读系列之三 axios中的adaptor

473 阅读2分钟

()本系列基于axios@0.19.0

上一节说到默认配置的adapter,本节就深入的看看,什么是adapter(适配器,转换器)

首先,adapter也是分两种情况的,一个是node环境中,一个是浏览器环境,我们这里只分析浏览器环境下的adapter,对于node环境,大家可以自行阅读源码

首先,adapter是一个函数,接收一个配置对象,执行返回一个promise

从上面代码的命名,我们可以初步认识到,这个adapter会对我们的请求request做一定处理

之后,我们可以看到,首先实力化了XHR对象,判断是否有认证信息,从而设置请求头里的Authorization,接下来就是xhr的open方法,初始化一个请求,三个参数,第一个是请求方法,第二个是请求的url,第三个true代表异步请求

接下来为请求设置了过期时间,以及为readystatechange,abort,onerror,timeout事件注册了回调函数

其中readystatechange事件触发的回调函数里,内容很简单,就是构建了respose的数据格式,构建完成后,将请求request置为null,其它的事件监听就不再讲述,可以参考https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest

接下来,为请求头设置承载 xsrf token 的值的 HTTP 头,关于xsrf token是什么,可以自行百度,这里要说的是if里的判断,在react-native, nativeScript以及webworkers里XMLHttpRequest都是存在的,只在标准浏览器环境设置,注意webworkers里window和doucument都是未定义的

接下来的内容比较好理解,设置一些请求头,相应数据的type,为上传以及下载进度事件注册事件处理回调等等

最终,将我们设置好的xhr实例request,调用request.send方法发送请求 总结来说,adapter就是根据我们传入的配置项,帮助我们发起ajax请求