Merge pull request #693 from EndangeredMassa/fix-path

Allow proxy to maintain the original target path
This commit is contained in:
Jarrett Cruger 2014-09-08 18:23:42 -04:00
commit 814fbd254d
2 changed files with 35 additions and 2 deletions

View File

@ -1,4 +1,5 @@
var common = exports, var common = exports,
path = require('path'),
url = require('url'), url = require('url'),
extend = require('util')._extend; extend = require('util')._extend;
@ -57,13 +58,22 @@ common.setupOutgoing = function(outgoing, options, req, forward) {
) { outgoing.headers.connection = 'close'; } ) { outgoing.headers.connection = 'close'; }
} }
// the final path is target path + relative path requested by user:
var target = options[forward || 'target'];
var targetPath = target
? (target.path || '')
: '';
// //
// Remark: Can we somehow not use url.parse as a perf optimization? // Remark: Can we somehow not use url.parse as a perf optimization?
// //
outgoing.path = !options.toProxy var outgoingPath = !options.toProxy
? url.parse(req.url).path ? url.parse(req.url).path
: req.url; : req.url;
outgoing.path = path.join(targetPath, outgoingPath);
return outgoing; return outgoing;
}; };

View File

@ -117,6 +117,29 @@ describe('lib/http-proxy/common.js', function () {
expect(outgoing.port).to.eql(443); expect(outgoing.port).to.eql(443);
}); });
it('should keep the original target path in the outgoing path', function(){
var outgoing = {};
common.setupOutgoing(outgoing, {target:
{ path: 'some-path' }
}, { url : 'am' });
expect(outgoing.path).to.eql('some-path/am');
});
it('should keep the original forward path in the outgoing path', function(){
var outgoing = {};
common.setupOutgoing(outgoing, {
target: {},
forward: {
path: 'some-path'
}
}, {
url : 'am'
}, 'forward');
expect(outgoing.path).to.eql('some-path/am');
});
}); });
describe('#setupSocket', function () { describe('#setupSocket', function () {
@ -144,4 +167,4 @@ describe('lib/http-proxy/common.js', function () {
expect(socketConfig.keepalive).to.eql(true); expect(socketConfig.keepalive).to.eql(true);
}); });
}); });
}); });