今日来看defaults.js文件,也就是咱们的默认配置.既然是配置,那就是说它是个对象{},
所以这个文件的格局就是 var defaults = {},而后exports.default = defaults
文件中有两个函数,第一个是设置申请头的"Content-Type", 另一个是抉择适配器的:
function setContentTypeIfUnset(headers, value) { if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) { headers['Content-Type'] = value; }}function getDefaultAdapter() { var adapter; if (typeof XMLHttpRequest !== 'undefined') { // 浏览器应用 XHR adapter adapter = require('./adapters/xhr'); // xhrAdapter 返回一个promise } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') { // node HTTP adapter adapter = require('./adapters/http'); // httpAdapter 返回一个promise } return adapter;}
而后就是default是的属性了:
adapter: getDefaultAdapter(), // 适配器,就是发送申请的办法 transformRequest: [function transformRequest(data, headers) { normalizeHeaderName(headers, 'Accept'); // 设置header['accept']的值 normalizeHeaderName(headers, 'Content-Type'); // 设置header['Content-Type']的值 if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isBuffer(data) || utils.isStream(data) || utils.isFile(data) || utils.isBlob(data) ) { return data; } if (utils.isArrayBufferView(data)) { return data.buffer; } if (utils.isURLSearchParams(data)) { // 设置header['Content-Type']的值 setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8'); return data.toString(); } if (utils.isObject(data)) { //设置header['Content-Type']的值 setContentTypeIfUnset(headers, 'application/json;charset=utf-8'); return JSON.stringify(data); } return data; }], transformResponse: [function transformResponse(data) { /*eslint no-param-reassign:0*/ if (typeof data === 'string') { try { data = JSON.parse(data); } catch (e) { /* Ignore */ } } return data; }], /** * 一个毫秒级的定时来终止一个申请,如果设为0则没有作用 * timeout is not created. */ timeout: 0, xsrfCookieName: 'XSRF-TOKEN', xsrfHeaderName: 'X-XSRF-TOKEN', maxContentLength: -1, maxBodyLength: -1, validateStatus: function validateStatus(status) { return status >= 200 && status < 300; }
而后增加了一些其余属性:
defaults.headers = { common: { 'Accept': 'application/json, text/plain, */*' }};utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) { defaults.headers[method] = {};});utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);});