Skip to content

Commit 99a452c

Browse files
committed
Only urlParse once.
1 parent d3224e3 commit 99a452c

File tree

2 files changed

+30
-9
lines changed

2 files changed

+30
-9
lines changed

src/connection.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ function Connection(config) {
1919
if (!this.config.headers['x-arango-version']) {
2020
this.config.headers['x-arango-version'] = this.config.arangoVersion;
2121
}
22-
this._request = createRequest(this.config.agent, this.config.agentOptions);
22+
this._request = createRequest(this.config.url, this.config.agent, this.config.agentOptions);
2323
this.promisify = promisify(this.config.promise);
2424
}
2525

@@ -36,13 +36,13 @@ Connection.agentDefaults = {
3636

3737
extend(Connection.prototype, {
3838
_resolveUrl(opts) {
39-
var url = this.config.url;
39+
var url = {pathname: ''};
4040
if (!opts.absolutePath) {
41-
url += '/_db/' + this.config.databaseName;
42-
if (opts.basePath) url += '/' + opts.basePath;
41+
url.pathname += '/_db/' + this.config.databaseName;
42+
if (opts.basePath) url.pathname += '/' + opts.basePath;
4343
}
44-
url += opts.path ? (opts.path.charAt(0) === '/' ? '' : '/') + opts.path : '';
45-
if (opts.qs) url += '?' + (typeof opts.qs === 'string' ? opts.qs : qs.stringify(opts.qs));
44+
url.pathname += opts.path ? (opts.path.charAt(0) === '/' ? '' : '/') + opts.path : '';
45+
if (opts.qs) url.search = '?' + (typeof opts.qs === 'string' ? opts.qs : qs.stringify(opts.qs));
4646
return url;
4747
},
4848
route(path) {

src/util/request.js

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,26 @@
11
'use strict';
22
var http = require('http');
33
var parseUrl = require('url').parse;
4-
var extend = require('extend');
54
var once = require('./once');
5+
var joinPath = require('path').join;
66

7-
module.exports = function (agent, agentOptions) {
7+
function rawCopy(obj) {
8+
var data = {};
9+
for (var k in obj) {
10+
if (obj.hasOwnProperty(k)) {
11+
data[k] = obj[k];
12+
}
13+
}
14+
return data;
15+
}
16+
17+
module.exports = function (baseUrl, agent, agentOptions) {
818
if (!agent && http.Agent) agent = new http.Agent(agentOptions); // server only
919

1020
var queue = [];
1121
var maxTasks = typeof agent.maxSockets === 'number' ? agent.maxSockets * 2 : Infinity;
1222
var activeTasks = 0;
23+
var baseUrlParts = rawCopy(parseUrl(baseUrl));
1324

1425
function drainQueue() {
1526
if (!queue.length || activeTasks >= maxTasks) return;
@@ -22,7 +33,17 @@ module.exports = function (agent, agentOptions) {
2233
}
2334

2435
return function request({method, url, headers, body}, cb) {
25-
var options = extend(parseUrl(url), {method, headers, agent});
36+
var path = baseUrlParts.pathname ? (
37+
url.pathname ? joinPath(baseUrlParts.pathname, url.pathname) : baseUrlParts.pathname
38+
) : url.pathname;
39+
var search = url.search ? (
40+
baseUrlParts.search ? baseUrlParts.search + '&' + url.search.slice(1) : url.search
41+
) : baseUrlParts.search;
42+
if (search) path += search;
43+
var options = {path, method, headers, agent};
44+
options.hostname = baseUrlParts.hostname;
45+
options.port = baseUrlParts.port;
46+
options.auth = baseUrlParts.auth;
2647

2748
queue.push(function (next) {
2849
var callback = once(function () {

0 commit comments

Comments
 (0)