[Bugfix] Allow for multiple ? in outgoing urls.

Without this fix urls that had multiple ? in them would drop sections
of the url since before there was an assumption of there only being one.
This commit is contained in:
koolc 2014-11-25 17:50:36 +08:00 committed by Sam Saccone
parent 361d4e3b00
commit 70ed1c4273
2 changed files with 7 additions and 5 deletions

View File

@ -141,7 +141,7 @@ common.urlJoin = function() {
lastSegs = last.split('?'), lastSegs = last.split('?'),
retSegs; retSegs;
args[lastIndex] = lastSegs[0]; args[lastIndex] = lastSegs.shift();
// //
// Join all strings, but remove empty strings so we don't get extra slashes from // Join all strings, but remove empty strings so we don't get extra slashes from
@ -155,7 +155,9 @@ common.urlJoin = function() {
// Only join the query string if it exists so we don't have trailing a '?' // Only join the query string if it exists so we don't have trailing a '?'
// on every request // on every request
lastSegs[1] && retSegs.push(lastSegs[1]);
// Handle case where there could be multiple ? in the URL.
retSegs.concat(lastSegs);
return retSegs.join('?') return retSegs.join('?')
}; };

View File

@ -203,13 +203,13 @@ describe('lib/http-proxy/common.js', function () {
expect(outgoing.path).to.eql('/forward/static/path'); expect(outgoing.path).to.eql('/forward/static/path');
}) })
it('should not modify the query string', function () { it.only('should not modify the query string', function () {
var outgoing = {}; var outgoing = {};
common.setupOutgoing(outgoing, { common.setupOutgoing(outgoing, {
target: { path: '/forward' }, target: { path: '/forward' },
}, { url: '/?foo=bar//&target=http://foobar.com/' }); }, { url: '/?foo=bar//&target=http://foobar.com/?a=1%26b=2&other=2' });
expect(outgoing.path).to.eql('/forward/?foo=bar//&target=http://foobar.com/'); expect(outgoing.path).to.eql('/forward/?foo=bar//&target=http://foobar.com/?a=1%26b=2&other=2');
}) })
}); });