mirror of
https://github.com/tenrok/axios.git
synced 2026-06-17 19:21:29 +03:00
Adding support for node
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
var buildUrl = require('./../buildUrl');
|
||||
var defaults = require('./../defaults');
|
||||
var transformData = require('./../transformData');
|
||||
var utils = require('./../utils');
|
||||
var http = require('http');
|
||||
var url = require('url');
|
||||
|
||||
module.exports = function httpAdapter(resolve, reject, config) {
|
||||
// Transform request data
|
||||
var data = transformData(
|
||||
config.data,
|
||||
config.headers,
|
||||
config.transformRequest
|
||||
);
|
||||
|
||||
// Merge headers
|
||||
var headers = utils.merge(
|
||||
defaults.headers.common,
|
||||
defaults.headers[config.method] || {},
|
||||
config.headers || {}
|
||||
);
|
||||
|
||||
// Parse url
|
||||
var parsed = url.parse(config.url);
|
||||
var options = {
|
||||
host: parsed.hostname,
|
||||
port: parsed.port,
|
||||
path: buildUrl(parsed.path, config.params).replace(/^\?/, ''),
|
||||
method: config.method,
|
||||
headers: headers
|
||||
};
|
||||
|
||||
// Create the request
|
||||
var req = http.request(options, function (res) {
|
||||
var responseText = '';
|
||||
res.on('data', function (chunk) {
|
||||
responseText += chunk;
|
||||
});
|
||||
|
||||
res.on('end', function () {
|
||||
var response = {
|
||||
data: transformData(
|
||||
responseText,
|
||||
res.headers,
|
||||
config.transformResponse
|
||||
),
|
||||
status: res.statusCode,
|
||||
headers: res.headers,
|
||||
config: config
|
||||
};
|
||||
|
||||
// Resolve or reject the Promise based on the status
|
||||
(res.statusCode >= 200 && res.statusCode < 300
|
||||
? resolve
|
||||
: reject)(
|
||||
response.data,
|
||||
response.status,
|
||||
response.headers,
|
||||
response.config
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
// Send the request
|
||||
req.end(data);
|
||||
};
|
||||
@@ -0,0 +1,97 @@
|
||||
var buildUrl = require('./../buildUrl');
|
||||
var cookies = require('./../cookies');
|
||||
var defaults = require('./../defaults');
|
||||
var parseHeaders = require('./../parseHeaders');
|
||||
var transformData = require('./../transformData');
|
||||
var urlIsSameOrigin = require('./../urlIsSameOrigin');
|
||||
var utils = require('./../utils');
|
||||
|
||||
module.exports = function xhrAdapter(resolve, reject, config) {
|
||||
// Transform request data
|
||||
var data = transformData(
|
||||
config.data,
|
||||
config.headers,
|
||||
config.transformRequest
|
||||
);
|
||||
|
||||
// Merge headers
|
||||
var headers = utils.merge(
|
||||
defaults.headers.common,
|
||||
defaults.headers[config.method] || {},
|
||||
config.headers || {}
|
||||
);
|
||||
|
||||
// Create the request
|
||||
var request = new(XMLHttpRequest || ActiveXObject)('Microsoft.XMLHTTP');
|
||||
request.open(config.method, buildUrl(config.url, config.params), true);
|
||||
|
||||
// Listen for ready state
|
||||
request.onreadystatechange = function () {
|
||||
if (request && request.readyState === 4) {
|
||||
// Prepare the response
|
||||
var headers = parseHeaders(request.getAllResponseHeaders());
|
||||
var response = {
|
||||
data: transformData(
|
||||
request.responseText,
|
||||
headers,
|
||||
config.transformResponse
|
||||
),
|
||||
status: request.status,
|
||||
headers: headers,
|
||||
config: config
|
||||
};
|
||||
|
||||
// Resolve or reject the Promise based on the status
|
||||
(request.status >= 200 && request.status < 300
|
||||
? resolve
|
||||
: reject)(
|
||||
response.data,
|
||||
response.status,
|
||||
response.headers,
|
||||
response.config
|
||||
);
|
||||
|
||||
// Clean up request
|
||||
request = null;
|
||||
}
|
||||
};
|
||||
|
||||
// Add xsrf header
|
||||
var xsrfValue = urlIsSameOrigin(config.url)
|
||||
? cookies.read(config.xsrfCookieName || defaults.xsrfCookieName)
|
||||
: undefined;
|
||||
if (xsrfValue) {
|
||||
headers[config.xsrfHeaderName || defaults.xsrfHeaderName] = xsrfValue;
|
||||
}
|
||||
|
||||
// Add headers to the request
|
||||
utils.forEach(headers, function (val, key) {
|
||||
// Remove Content-Type if data is undefined
|
||||
if (!data && key.toLowerCase() === 'content-type') {
|
||||
delete headers[key];
|
||||
}
|
||||
// Otherwise add header to the request
|
||||
else {
|
||||
request.setRequestHeader(key, val);
|
||||
}
|
||||
});
|
||||
|
||||
// Add withCredentials to request if needed
|
||||
if (config.withCredentials) {
|
||||
request.withCredentials = true;
|
||||
}
|
||||
|
||||
// Add responseType to request if needed
|
||||
if (config.responseType) {
|
||||
try {
|
||||
request.responseType = config.responseType;
|
||||
} catch (e) {
|
||||
if (request.responseType !== 'json') {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Send the request
|
||||
request.send(data);
|
||||
};
|
||||
+10
-89
@@ -1,10 +1,5 @@
|
||||
var Promise = require('es6-promise').Promise;
|
||||
var buildUrl = require('./buildUrl');
|
||||
var cookies = require('./cookies');
|
||||
var defaults = require('./defaults');
|
||||
var parseHeaders = require('./parseHeaders');
|
||||
var transformData = require('./transformData');
|
||||
var urlIsSameOrigin = require('./urlIsSameOrigin');
|
||||
var utils = require('./utils');
|
||||
var spread = require('./spread');
|
||||
|
||||
@@ -19,92 +14,18 @@ var axios = module.exports = function axios(config) {
|
||||
config.withCredentials = config.withCredentials || defaults.withCredentials;
|
||||
|
||||
var promise = new Promise(function (resolve, reject) {
|
||||
// Create the request
|
||||
var request = new(XMLHttpRequest || ActiveXObject)('Microsoft.XMLHTTP');
|
||||
var data = transformData(
|
||||
config.data,
|
||||
config.headers,
|
||||
config.transformRequest
|
||||
);
|
||||
|
||||
// Open the request
|
||||
request.open(config.method, buildUrl(config.url, config.params), true);
|
||||
|
||||
// Listen for ready state
|
||||
request.onreadystatechange = function () {
|
||||
if (request && request.readyState === 4) {
|
||||
// Prepare the response
|
||||
var headers = parseHeaders(request.getAllResponseHeaders());
|
||||
var response = {
|
||||
data: transformData(
|
||||
request.responseText,
|
||||
headers,
|
||||
config.transformResponse
|
||||
),
|
||||
status: request.status,
|
||||
headers: headers,
|
||||
config: config
|
||||
};
|
||||
|
||||
// Resolve or reject the Promise based on the status
|
||||
(request.status >= 200 && request.status < 300
|
||||
? resolve
|
||||
: reject)(
|
||||
response.data,
|
||||
response.status,
|
||||
response.headers,
|
||||
response.config
|
||||
);
|
||||
|
||||
// Clean up request
|
||||
request = null;
|
||||
try {
|
||||
// For browsers use XHR adapter
|
||||
if (typeof window !== 'undefined') {
|
||||
require('./adapters/xhr')(resolve, reject, config);
|
||||
}
|
||||
};
|
||||
|
||||
// Merge headers and add to request
|
||||
var headers = utils.merge(
|
||||
defaults.headers.common,
|
||||
defaults.headers[config.method] || {},
|
||||
config.headers || {}
|
||||
);
|
||||
|
||||
// Add xsrf header
|
||||
var xsrfValue = urlIsSameOrigin(config.url)
|
||||
? cookies.read(config.xsrfCookieName || defaults.xsrfCookieName)
|
||||
: undefined;
|
||||
if (xsrfValue) {
|
||||
headers[config.xsrfHeaderName || defaults.xsrfHeaderName] = xsrfValue;
|
||||
// For node use HTTP adapter
|
||||
else if (typeof process !== 'undefined') {
|
||||
require('./adapters/http')(resolve, reject, config);
|
||||
}
|
||||
} catch (e) {
|
||||
reject(e);
|
||||
}
|
||||
|
||||
utils.forEach(headers, function (val, key) {
|
||||
// Remove Content-Type if data is undefined
|
||||
if (!data && key.toLowerCase() === 'content-type') {
|
||||
delete headers[key];
|
||||
}
|
||||
// Otherwise add header to the request
|
||||
else {
|
||||
request.setRequestHeader(key, val);
|
||||
}
|
||||
});
|
||||
|
||||
// Add withCredentials to request if needed
|
||||
if (config.withCredentials) {
|
||||
request.withCredentials = true;
|
||||
}
|
||||
|
||||
// Add responseType to request if needed
|
||||
if (config.responseType) {
|
||||
try {
|
||||
request.responseType = config.responseType;
|
||||
} catch (e) {
|
||||
if (request.responseType !== 'json') {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Send the request
|
||||
request.send(data);
|
||||
});
|
||||
|
||||
// Provide alias for success
|
||||
|
||||
Reference in New Issue
Block a user