2
0
mirror of https://github.com/tenrok/axios.git synced 2026-06-05 16:42:32 +03:00

Adding support for node

This commit is contained in:
mzabriskie
2014-09-12 12:38:17 -06:00
parent 743f8683da
commit f4a334e17c
15 changed files with 14408 additions and 869 deletions
+7090 -384
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
File diff suppressed because one or more lines are too long
+8 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+7090 -384
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
File diff suppressed because one or more lines are too long
+8 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+66
View File
@@ -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);
};
+97
View File
@@ -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
View File
@@ -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
+1 -1
View File
@@ -5,7 +5,7 @@
"main": "index.js",
"scripts": {
"test": "grunt test",
"start": "node ./sandbox/index.js"
"start": "node ./sandbox/server.js"
},
"repository": {
"type": "git",
+20
View File
@@ -0,0 +1,20 @@
var axios = require('../index');
var URL = 'http://127.0.0.1:3000/api';
var BODY = {
foo: 'bar',
baz: 1234
};
function handleSuccess(data) { console.log(data); }
function handleFailure(data) { console.log('error', data); }
// GET
axios.get(URL, { params: BODY })
.then(handleSuccess)
.catch(handleFailure);
// POST
axios.post(URL, BODY)
.then(handleSuccess)
.catch(handleFailure);
+14 -5
View File
@@ -4,6 +4,16 @@ var path = require('path');
var http = require('http');
var server;
function pipeFileToResponse(res, file, type) {
if (type) {
res.writeHead(200, {
'Content-Type': type
});
}
fs.createReadStream(path.join(__dirname, file)).pipe(res);
}
server = http.createServer(function (req, res) {
req.setEncoding('utf8');
@@ -17,12 +27,11 @@ server = http.createServer(function (req, res) {
}
if (pathname === '/index.html') {
fs.createReadStream(path.join(__dirname, pathname)).pipe(res);
pipeFileToResponse(res, './client.html');
} else if (pathname === '/axios.js') {
res.writeHead(200, {
'Content-Type': 'text/javascript'
});
fs.createReadStream(path.join(__dirname, '../dist/axios.js')).pipe(res);
pipeFileToResponse(res, '../dist/axios.js', 'text/javascript');
} else if (pathname === '/axios.map') {
pipeFileToResponse(res, '../dist/axios.map', 'text/javascript');
} else if (pathname === '/api') {
var status;
var result;