From efc202615198a898dc57cbd0b615e17039401a6f Mon Sep 17 00:00:00 2001 From: Alan Plum Date: Tue, 20 Jan 2015 16:53:06 +0100 Subject: [PATCH] Support parsed url objects. --- js/client/tests/shell-request.js | 1 + js/common/modules/org/arangodb/request.js | 24 ++++++++++++++++++----- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/js/client/tests/shell-request.js b/js/client/tests/shell-request.js index eb33d3e6bd..e27a1d26d0 100644 --- a/js/client/tests/shell-request.js +++ b/js/client/tests/shell-request.js @@ -31,6 +31,7 @@ var jsunity = require('jsunity'); var expect = require('expect.js'); var arangodb = require('org/arangodb'); var request = require('org/arangodb/request'); +var url = require('url'); var qs = require('qs'); // ----------------------------------------------------------------------------- diff --git a/js/common/modules/org/arangodb/request.js b/js/common/modules/org/arangodb/request.js index c8cd5cd2e5..2827674cba 100644 --- a/js/common/modules/org/arangodb/request.js +++ b/js/common/modules/org/arangodb/request.js @@ -38,6 +38,7 @@ var mediaTyper = require('media-typer'); var contentDisposition = require('content-disposition'); var querystring = require('querystring'); var qs = require('qs'); +var url = require('url'); function Response(res, encoding) { this.status = this.statusCode = res.code; @@ -115,14 +116,27 @@ function request(req) { req = {url: req, method: 'GET'}; } - var url = req.url || req.uri; - if (!url) { + var path = req.url || req.uri; + if (!path) { throw new Error('Request URL must not be empty.'); } - var query = querystringify(req.qs, req.useQuerystring); - if (query) { - url += '?' + query; + + var pathObj = typeof path === 'string' ? url.parse(path) : path; + if (pathObj.auth) { + var auth = pathObj.auth.split(':'); + req = extend({ + auth: { + username: decodeURIComponent(auth[0]), + password: decodeURIComponent(auth[1]) + } + }, req); + delete pathObj.auth; } + var query = typeof req.qs === 'string' ? req.qs : querystringify(req.qs, req.useQuerystring); + if (query) { + pathObj.search = query; + } + path = url.format(pathObj); var contentType; var body = req.body;