本系列基于axios@0.19.0
回过头来看axios.js:
(1)开头首先定义createInstance函数,接下来,调用这个函数,传入defaults作为参数,从而获得了一个axios的实例。
(2)进入default.js,这个文件的作用就是定义了一个配置对象defaults,将其作为默认配置,用来createInstance时,作为参数传入初始化axios实例

(3)如上图,defaults这个对象,具有8个属性或方法,我们来分别看
a. adpter方法

adpter方法如图,作用是获得默认的adptor,方法内部会检测,如果process有定义(node环境),adapter为http adpter,如果是浏览器环境(xhr有定义),adapter为XHR adapter。关于adapter是什么,具体怎么定义,我们下一节再来探讨。
b.transformRequest属性

注意这个属性是一个数组,包含一个函数作为数组元素,这个函数有两个参数,一个是请求数据data,一个是请求头信息,可以看出,这个函数首先调用normalizeHeaderName这个helper目录下的辅助方法,对请求头信息的字段名称做规范化处理,保持请求头字段名称一致,方便后续处理

接下来,normalizeHeaderName方法会根据请求数据data类型的不同(对数据类型的判断,调用的是工具对象utils里的方法,名称还是比较直观的),对数据做一定处理,以方便后续使用

注意这个内部调用的setContentTypeIfUnset方法,作用如同名称,当请求头中Content-Type属性没有设置时,手动为其设置一个默认值
c.transformResponse属性

这个属性和transformRequest属性类似,也是一个数组,其数组元素是一个函数,做的事情很简单,就是对字符串类型的响应数据,对其尝试转换为JSON格式数据,返回客户端
d.其余属性方法

剩下几个属性方法比较简单,命名也很清楚,没什么好说的,之后分析中有用到会再说明
继续往下看:

首先为defaults设置默认的headers,然后给defaults的headers设置delete,get,head三个属性,默认都为空对象,又继续为defaults的headers设置post,put,patch三个属性,属性值是包含一个默认Content-Type的值的对象,这个merge方法就是把传入的对象对象属性合并到一个空对象上,看到这个6个属性,是不是很熟悉呢?
最后呢,就是把defaults这个模块导出,在实例化axios时,作为默认配置对象传入