今日来看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);
});
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。