Skip to content

Commit feec171

Browse files
committed
Replaced request with http.request wrapper.
1 parent a70683f commit feec171

File tree

16 files changed

+12890
-969
lines changed

16 files changed

+12890
-969
lines changed

dist/arango.all.js

Lines changed: 6331 additions & 574 deletions
Large diffs are not rendered by default.

dist/arango.all.min.js

Lines changed: 5 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/arango.js

Lines changed: 6329 additions & 253 deletions
Large diffs are not rendered by default.

dist/arango.min.js

Lines changed: 5 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/connection.js

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
var promisify = require('./util/promisify');
33
var extend = require('extend');
44
var qs = require('querystring');
5-
var xhr = require('request');
5+
var createRequest = require('./util/request');
66
var ArangoError = require('./error');
77
var Route = require('./route');
88
var jsonMime = /\/(json|javascript)(\W|$)/;
@@ -14,19 +14,23 @@ function Connection(config) {
1414
config = { url: config };
1515
}
1616
this.config = extend({}, Connection.defaults, config);
17+
this.config.agentOptions = extend({}, Connection.agentDefaults, this.config.agentOptions);
1718
if (!this.config.headers) this.config.headers = {};
1819
if (!this.config.headers['x-arango-version']) {
1920
this.config.headers['x-arango-version'] = this.config.arangoVersion;
2021
}
21-
this.pool = extend({}, Connection.defaults.poolOpts, this.config.poolOpts);
22+
this._request = createRequest(this.config.agentOptions);
2223
}
2324

2425
Connection.defaults = {
2526
url: 'http://localhost:8529',
2627
databaseName: '_system',
27-
arangoVersion: 20300,
28-
requestOpts: { forever: true },
29-
poolOpts: { maxSockets: 5 }
28+
arangoVersion: 20300
29+
};
30+
Connection.agentDefaults = {
31+
maxSockets: 3,
32+
keepAlive: true,
33+
keepAliveMsecs: 1000
3034
};
3135

3236
extend(Connection.prototype, {
@@ -65,22 +69,21 @@ extend(Connection.prototype, {
6569
}
6670
}
6771

68-
xhr(extend({}, Connection.defaults.requestOpts, this.config.requestOpts, {
72+
this._request({
6973
url: this._resolveUrl(opts),
7074
headers: extend(headers, this.config.headers, opts.headers),
7175
method: (opts.method || 'get').toUpperCase(),
72-
pool: this.pool,
7376
body: body
74-
}), function (err, response, rawBody) {
75-
response.rawBody = rawBody;
76-
if (err) callback(err, response);else if (response.headers['content-type'].match(jsonMime)) {
77+
}, function (err, res) {
78+
if (err) callback(err);else if (res.headers['content-type'].match(jsonMime)) {
7779
try {
78-
response.body = JSON.parse(rawBody);
80+
res.rawBody = res.body;
81+
res.body = JSON.parse(res.rawBody);
7982
} catch (e) {
80-
return callback(extend(e, { response: response }));
83+
return callback(extend(e, { response: res }));
8184
}
82-
if (!response.body.error) callback(null, response);else callback(extend(new ArangoError(response.body), { response: response }));
83-
} else callback(null, extend(response, { body: rawBody }));
85+
if (!res.body.error) callback(null, res);else callback(extend(new ArangoError(res.body), { response: res }));
86+
} else callback(null, extend(res, { rawBody: res.body }));
8487
});
8588
return promise;
8689
}

lib/util/once.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
'use strict';
2+
module.exports = function once(cb) {
3+
var called = false;
4+
return function () {
5+
if (called) return;
6+
called = true;
7+
return cb.apply(this, arguments);
8+
};
9+
};

lib/util/request.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
'use strict';
2+
var http = require('http');
3+
var parseUrl = require('url').parse;
4+
var extend = require('extend');
5+
var once = require('./once');
6+
7+
module.exports = function (agentOptions) {
8+
var agent;
9+
if (http.Agent) agent = new http.Agent(agentOptions); // server only
10+
return function request(_ref, cb) {
11+
var method = _ref.method;
12+
var url = _ref.url;
13+
var headers = _ref.headers;
14+
var body = _ref.body;
15+
16+
var options = extend(parseUrl(url), { method: method, headers: headers, agent: agent });
17+
var callback = once(cb);
18+
var req = http.request(options, function (res) {
19+
var data = [];
20+
res.on('data', function (b) {
21+
data.push(b);
22+
}).on('end', function () {
23+
res.body = data.join('');
24+
callback(null, res);
25+
});
26+
});
27+
req.on('error', function (err) {
28+
err.request = req;
29+
callback(err);
30+
});
31+
if (body) req.write(body);
32+
req.end();
33+
};
34+
};

package.json

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,9 @@
5858
"istanbul": "^0.3.14",
5959
"mocha": "^2.2.4",
6060
"uglify-js": "^2.4.21",
61-
"watch": "^0.16.0",
62-
"xhr": "^2.0.1"
63-
},
64-
"browser": {
65-
"request": "xhr"
61+
"watch": "^0.16.0"
6662
},
6763
"dependencies": {
68-
"extend": "^2.0.1",
69-
"request": "^2.55.0"
64+
"extend": "^2.0.1"
7065
}
7166
}

0 commit comments

Comments
 (0)