mirror of
https://github.com/tenrok/axios.git
synced 2026-06-23 20:40:40 +03:00
Fixing config weirdness
This commit is contained in:
+2
-14
@@ -1,6 +1,5 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var defaults = require('./../defaults');
|
|
||||||
var utils = require('./../utils');
|
var utils = require('./../utils');
|
||||||
var buildURL = require('./../helpers/buildURL');
|
var buildURL = require('./../helpers/buildURL');
|
||||||
var transformData = require('./../helpers/transformData');
|
var transformData = require('./../helpers/transformData');
|
||||||
@@ -12,19 +11,8 @@ var pkg = require('./../../package.json');
|
|||||||
var Buffer = require('buffer').Buffer;
|
var Buffer = require('buffer').Buffer;
|
||||||
|
|
||||||
module.exports = function httpAdapter(resolve, reject, config) {
|
module.exports = function httpAdapter(resolve, reject, config) {
|
||||||
// Transform request data
|
var data = config.data;
|
||||||
var data = transformData(
|
var headers = config.headers;
|
||||||
config.data,
|
|
||||||
config.headers,
|
|
||||||
config.transformRequest
|
|
||||||
);
|
|
||||||
|
|
||||||
// Merge headers
|
|
||||||
var headers = utils.merge(
|
|
||||||
defaults.headers.common,
|
|
||||||
defaults.headers[config.method] || {},
|
|
||||||
config.headers || {}
|
|
||||||
);
|
|
||||||
|
|
||||||
// Set User-Agent (required by some servers)
|
// Set User-Agent (required by some servers)
|
||||||
// Only set header if it hasn't been set in config
|
// Only set header if it hasn't been set in config
|
||||||
|
|||||||
+10
-22
@@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
/*global ActiveXObject:true*/
|
/*global ActiveXObject:true*/
|
||||||
|
|
||||||
var defaults = require('./../defaults');
|
|
||||||
var utils = require('./../utils');
|
var utils = require('./../utils');
|
||||||
var buildURL = require('./../helpers/buildURL');
|
var buildURL = require('./../helpers/buildURL');
|
||||||
var parseHeaders = require('./../helpers/parseHeaders');
|
var parseHeaders = require('./../helpers/parseHeaders');
|
||||||
@@ -12,21 +11,10 @@ var ieVersion = require('./../helpers/ieVersion');
|
|||||||
var btoa = window.btoa || require('./../helpers/btoa');
|
var btoa = window.btoa || require('./../helpers/btoa');
|
||||||
|
|
||||||
module.exports = function xhrAdapter(resolve, reject, config) {
|
module.exports = function xhrAdapter(resolve, reject, config) {
|
||||||
// Transform request data
|
var requestData = config.data;
|
||||||
var data = transformData(
|
var requestHeaders = config.headers;
|
||||||
config.data,
|
|
||||||
config.headers,
|
|
||||||
config.transformRequest
|
|
||||||
);
|
|
||||||
|
|
||||||
// Merge headers
|
if (utils.isFormData(requestData)) {
|
||||||
var requestHeaders = utils.merge(
|
|
||||||
defaults.headers.common,
|
|
||||||
defaults.headers[config.method] || {},
|
|
||||||
config.headers || {}
|
|
||||||
);
|
|
||||||
|
|
||||||
if (utils.isFormData(data)) {
|
|
||||||
delete requestHeaders['Content-Type']; // Let the browser set it
|
delete requestHeaders['Content-Type']; // Let the browser set it
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -89,19 +77,19 @@ module.exports = function xhrAdapter(resolve, reject, config) {
|
|||||||
var cookies = require('./../helpers/cookies');
|
var cookies = require('./../helpers/cookies');
|
||||||
|
|
||||||
// Add xsrf header
|
// Add xsrf header
|
||||||
var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?
|
var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?
|
||||||
cookies.read(config.xsrfCookieName || defaults.xsrfCookieName) :
|
cookies.read(config.xsrfCookieName) :
|
||||||
undefined;
|
undefined;
|
||||||
|
|
||||||
if (xsrfValue) {
|
if (xsrfValue) {
|
||||||
requestHeaders[config.xsrfHeaderName || defaults.xsrfHeaderName] = xsrfValue;
|
requestHeaders[config.xsrfHeaderName] = xsrfValue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add headers to the request
|
// Add headers to the request
|
||||||
if (!xDomain) {
|
if (!xDomain) {
|
||||||
utils.forEach(requestHeaders, function setRequestHeader(val, key) {
|
utils.forEach(requestHeaders, function setRequestHeader(val, key) {
|
||||||
if (!data && key.toLowerCase() === 'content-type') {
|
if (!requestData && key.toLowerCase() === 'content-type') {
|
||||||
// Remove Content-Type if data is undefined
|
// Remove Content-Type if data is undefined
|
||||||
delete requestHeaders[key];
|
delete requestHeaders[key];
|
||||||
} else {
|
} else {
|
||||||
@@ -127,10 +115,10 @@ module.exports = function xhrAdapter(resolve, reject, config) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (utils.isArrayBuffer(data)) {
|
if (utils.isArrayBuffer(requestData)) {
|
||||||
data = new DataView(data);
|
requestData = new DataView(requestData);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send the request
|
// Send the request
|
||||||
request.send(data);
|
request.send(requestData);
|
||||||
};
|
};
|
||||||
|
|||||||
+28
-12
@@ -7,15 +7,10 @@ var InterceptorManager = require('./core/InterceptorManager');
|
|||||||
var isAbsoluteURL = require('./helpers/isAbsoluteURL');
|
var isAbsoluteURL = require('./helpers/isAbsoluteURL');
|
||||||
var combineURLs = require('./helpers/combineURLs');
|
var combineURLs = require('./helpers/combineURLs');
|
||||||
var bind = require('./helpers/bind');
|
var bind = require('./helpers/bind');
|
||||||
|
var transformData = require('./helpers/transformData');
|
||||||
|
|
||||||
function Axios(defaultConfig) {
|
function Axios(defaultConfig) {
|
||||||
this.defaultConfig = utils.merge({
|
this.defaults = utils.merge({}, defaultConfig);
|
||||||
headers: {},
|
|
||||||
timeout: defaults.timeout,
|
|
||||||
transformRequest: defaults.transformRequest,
|
|
||||||
transformResponse: defaults.transformResponse
|
|
||||||
}, defaultConfig);
|
|
||||||
|
|
||||||
this.interceptors = {
|
this.interceptors = {
|
||||||
request: new InterceptorManager(),
|
request: new InterceptorManager(),
|
||||||
response: new InterceptorManager()
|
response: new InterceptorManager()
|
||||||
@@ -31,14 +26,36 @@ Axios.prototype.request = function request(config) {
|
|||||||
}, arguments[1]);
|
}, arguments[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
config = utils.merge(this.defaultConfig, { method: 'get' }, config);
|
config = utils.merge(defaults, this.defaults, { method: 'get' }, config);
|
||||||
|
|
||||||
|
// Support baseURL config
|
||||||
if (config.baseURL && !isAbsoluteURL(config.url)) {
|
if (config.baseURL && !isAbsoluteURL(config.url)) {
|
||||||
config.url = combineURLs(config.baseURL, config.url);
|
config.url = combineURLs(config.baseURL, config.url);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Don't allow overriding defaults.withCredentials
|
// Don't allow overriding defaults.withCredentials
|
||||||
config.withCredentials = config.withCredentials || defaults.withCredentials;
|
config.withCredentials = config.withCredentials || this.defaults.withCredentials;
|
||||||
|
|
||||||
|
// Transform request data
|
||||||
|
config.data = transformData(
|
||||||
|
config.data,
|
||||||
|
config.headers,
|
||||||
|
config.transformRequest
|
||||||
|
);
|
||||||
|
|
||||||
|
// Flatten headers
|
||||||
|
config.headers = utils.merge(
|
||||||
|
config.headers.common || {},
|
||||||
|
config.headers[config.method] || {},
|
||||||
|
config.headers || {}
|
||||||
|
);
|
||||||
|
|
||||||
|
utils.forEach(
|
||||||
|
['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],
|
||||||
|
function cleanHeaderConfig(method) {
|
||||||
|
delete config.headers[method];
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
// Hook up interceptors middleware
|
// Hook up interceptors middleware
|
||||||
var chain = [dispatchRequest, undefined];
|
var chain = [dispatchRequest, undefined];
|
||||||
@@ -59,8 +76,7 @@ Axios.prototype.request = function request(config) {
|
|||||||
return promise;
|
return promise;
|
||||||
};
|
};
|
||||||
|
|
||||||
var defaultInstance = new Axios();
|
var defaultInstance = new Axios(defaults);
|
||||||
|
|
||||||
var axios = module.exports = bind(Axios.prototype.request, defaultInstance);
|
var axios = module.exports = bind(Axios.prototype.request, defaultInstance);
|
||||||
|
|
||||||
axios.create = function create(defaultConfig) {
|
axios.create = function create(defaultConfig) {
|
||||||
@@ -68,7 +84,7 @@ axios.create = function create(defaultConfig) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Expose defaults
|
// Expose defaults
|
||||||
axios.defaults = defaults;
|
axios.defaults = defaultInstance.defaults;
|
||||||
|
|
||||||
// Expose all/spread
|
// Expose all/spread
|
||||||
axios.all = function all(promises) {
|
axios.all = function all(promises) {
|
||||||
|
|||||||
+5
-1
@@ -212,7 +212,11 @@ function forEach(obj, fn) {
|
|||||||
function merge(/* obj1, obj2, obj3, ... */) {
|
function merge(/* obj1, obj2, obj3, ... */) {
|
||||||
var result = {};
|
var result = {};
|
||||||
function assignValue(val, key) {
|
function assignValue(val, key) {
|
||||||
result[key] = val;
|
if (typeof result[key] === 'object' && typeof val === 'object') {
|
||||||
|
result[key] = merge(result[key], val);
|
||||||
|
} else {
|
||||||
|
result[key] = val;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var i = 0, l = arguments.length; i < l; i++) {
|
for (var i = 0, l = arguments.length; i < l; i++) {
|
||||||
|
|||||||
@@ -1,6 +1,22 @@
|
|||||||
|
var axios = require('../../index');
|
||||||
var defaults = require('../../lib/defaults');
|
var defaults = require('../../lib/defaults');
|
||||||
|
var utils = require('../../lib/utils');
|
||||||
|
|
||||||
describe('defaults', function () {
|
describe('defaults', function () {
|
||||||
|
var __defaults;
|
||||||
|
var XSRF_COOKIE_NAME = 'CUSTOM-XSRF-TOKEN';
|
||||||
|
|
||||||
|
beforeEach(function () {
|
||||||
|
jasmine.Ajax.install();
|
||||||
|
__defaults = axios.defaults;
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(function () {
|
||||||
|
jasmine.Ajax.uninstall();
|
||||||
|
axios.defaults = __defaults;
|
||||||
|
document.cookie = XSRF_COOKIE_NAME + '=;expires=' + new Date(Date.now() - 86400000).toGMTString();
|
||||||
|
});
|
||||||
|
|
||||||
it('should transform request json', function () {
|
it('should transform request json', function () {
|
||||||
expect(defaults.transformRequest[0]({foo: 'bar'})).toEqual('{"foo":"bar"}');
|
expect(defaults.transformRequest[0]({foo: 'bar'})).toEqual('{"foo":"bar"}');
|
||||||
});
|
});
|
||||||
@@ -19,5 +35,105 @@ describe('defaults', function () {
|
|||||||
it('should do nothing to response string', function () {
|
it('should do nothing to response string', function () {
|
||||||
expect(defaults.transformResponse[0]('foo=bar')).toEqual('foo=bar');
|
expect(defaults.transformResponse[0]('foo=bar')).toEqual('foo=bar');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should use global defaults config', function (done) {
|
||||||
|
var request;
|
||||||
|
|
||||||
|
axios({ url: '/foo' });
|
||||||
|
|
||||||
|
setTimeout(function () {
|
||||||
|
request = jasmine.Ajax.requests.mostRecent();
|
||||||
|
|
||||||
|
expect(request.url).toBe('/foo');
|
||||||
|
done();
|
||||||
|
}, 0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should use modified defaults config', function (done) {
|
||||||
|
var request;
|
||||||
|
axios.defaults.baseURL = 'http://example.com/';
|
||||||
|
|
||||||
|
axios({ url: '/foo' });
|
||||||
|
|
||||||
|
setTimeout(function () {
|
||||||
|
request = jasmine.Ajax.requests.mostRecent();
|
||||||
|
|
||||||
|
expect(request.url).toBe('http://example.com/foo');
|
||||||
|
done();
|
||||||
|
}, 0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should use request config', function (done) {
|
||||||
|
var request;
|
||||||
|
|
||||||
|
axios({
|
||||||
|
url: '/foo',
|
||||||
|
baseURL: 'http://www.example.com'
|
||||||
|
});
|
||||||
|
|
||||||
|
setTimeout(function () {
|
||||||
|
request = jasmine.Ajax.requests.mostRecent();
|
||||||
|
|
||||||
|
expect(request.url).toBe('http://www.example.com/foo');
|
||||||
|
done();
|
||||||
|
}, 0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should use default config for custom instance', function (done) {
|
||||||
|
var request;
|
||||||
|
var instance = axios.create({
|
||||||
|
xsrfCookieName: XSRF_COOKIE_NAME,
|
||||||
|
xsrfHeaderName: 'X-CUSTOM-XSRF-TOKEN'
|
||||||
|
});
|
||||||
|
document.cookie = instance.defaults.xsrfCookieName + '=foobarbaz';
|
||||||
|
|
||||||
|
instance.get('/foo');
|
||||||
|
|
||||||
|
setTimeout(function () {
|
||||||
|
request = jasmine.Ajax.requests.mostRecent();
|
||||||
|
|
||||||
|
expect(request.requestHeaders[instance.defaults.xsrfHeaderName]).toEqual('foobarbaz');
|
||||||
|
done();
|
||||||
|
}, 0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should use header config', function (done) {
|
||||||
|
var request;
|
||||||
|
var instance = axios.create({
|
||||||
|
headers: {
|
||||||
|
common: {
|
||||||
|
'X-COMMON-HEADER': 'commonHeaderValue'
|
||||||
|
},
|
||||||
|
get: {
|
||||||
|
'X-GET-HEADER': 'getHeaderValue'
|
||||||
|
},
|
||||||
|
post: {
|
||||||
|
'X-POST-HEADER': 'postHeaderValue'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
instance.get('/foo', {
|
||||||
|
headers: {
|
||||||
|
'X-FOO-HEADER': 'fooHeaderValue',
|
||||||
|
'X-BAR-HEADER': 'barHeaderValue'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
setTimeout(function () {
|
||||||
|
request = jasmine.Ajax.requests.mostRecent();
|
||||||
|
|
||||||
|
expect(request.requestHeaders).toEqual(
|
||||||
|
utils.merge(defaults.headers.common, {
|
||||||
|
'X-COMMON-HEADER': 'commonHeaderValue',
|
||||||
|
'X-GET-HEADER': 'getHeaderValue',
|
||||||
|
'X-FOO-HEADER': 'fooHeaderValue',
|
||||||
|
'X-BAR-HEADER': 'barHeaderValue'
|
||||||
|
})
|
||||||
|
);
|
||||||
|
done();
|
||||||
|
}, 0);
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -23,5 +23,20 @@ describe('utils::merge', function () {
|
|||||||
expect(d.foo).toEqual(789);
|
expect(d.foo).toEqual(789);
|
||||||
expect(d.bar).toEqual(456);
|
expect(d.bar).toEqual(456);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should merge recursively', function () {
|
||||||
|
var a = {foo: {bar: 123}};
|
||||||
|
var b = {foo: {baz: 456}, bar: {qux: 789}};
|
||||||
|
|
||||||
|
expect(merge(a, b)).toEqual({
|
||||||
|
foo: {
|
||||||
|
bar: 123,
|
||||||
|
baz: 456
|
||||||
|
},
|
||||||
|
bar: {
|
||||||
|
qux: 789
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user