defaults(默认配置)和mergeConfig(合并config方法)
程序员文章站
2024-01-23 11:33:46
axios学习笔记defaults(默认配置)和mergeConfig(合并config方法) "源码地址" 找到入口文件 axios/lib/axios.js ... var mergeConfig = require('./core/mergeConfig');` var defaults = ......
axios学习笔记defaults(默认配置)和mergeconfig(合并config方法)
找到入口文件
axios/lib/axios.js
... var mergeconfig = require('./core/mergeconfig');` var defaults = require('./defaults')` ...
学习mergeconfig
axios/lib/core/mergeconfig.js
var utils = require('../utils')//引入公用方法 // 合并 config1 和config2,并将一些默认配置项放到config中 function mergeconfig(config1, config2) { config2 = config2 || {}; var config = {} //默认配置参数字段 //从config2中拿到config里的字段 var valuefromconfig2keys = ['url', 'method', 'params', 'data']; //合并config1和config2中的这些字段,config2优先 var mergedeeppropertieskeys = ['headers', 'auth', 'proxy']; // 从config2中拿到default的字段 var defaulttoconfig2keys = [ 'baseurl', 'url', 'transformrequest', 'transformresponse', 'paramsserializer', 'timeout', 'withcredentials', 'adapter', 'responsetype', 'xsrfcookiename', 'xsrfheadername', 'onuploadprogress', 'ondownloadprogress', 'maxcontentlength', 'validatestatus', 'maxredirects', 'httpagent', 'httpsagent', 'canceltoken', 'socketpath' ]; //将config2中valuefromconfig2key里存在的项复制config对象里 utils.foreach(valuefromconfig2keys, function valuefromconfig2(prop){//prop为valuefromconfig2keyd中的具体每项的值 if(typeof config2[prop] !== 'undefined'){ config[prop] = config2[prop]; } }) utils.foreach(mergedeeppropertieskeys, function mergedeepproperties(prop){ if(utils.isobject(config2[prop])){//如果config2[prop]为对象,进行深度合并 config[prop] = utils.deepmerge(config1[prop], config2[prop]);//此处确保了config1[prop]的存在 } else if(typeof config2[prop] != 'undefiend') {//config2[prop]存在且不为对象,直接赋值 config[prop] = config2[prop]; } else if(utils.isobect(config1[prop])){//config2[prop]不存在但config1[prop]存在且为对象 config[prop] = utils.deepmerge(config1[prop]); } eles {//config2[prop]不存在且config1[prop]不为对象 config[prop] = config1[prop]; } }) // 从config2中拿到default的字段,如果没有去config1中拿字段 utils.foreach(defaulttoconfig2keys, function defaulttoconfig2(prop){ if(typeof config2[prop] !== 'undefined'){ config[prop] = config2[prop]; } else { config[prop] = config1[prop] } }) //合并所有关键字 var axioskeys = valuefromconfig2keys.concat(mergedeeppropeotieskeys).cancat(defaulttoconfig2key2); //找出存在config2中不同于默认配置项的项,并加到config上去 var otherkeys = object.keys(config2).filter(function filteraxioskeys(key){ return axioskeys.indexof(key) === -1 }); utils.foreach(otherkey2, function other(prop){ if(typeof config2[prop] !== 'undefined' || typeof config1[prop] !== 'undefined'){ config[prop] = config2[prop] || config1[prop]; } }) //返回拼接后的对象 return config; }