diff --git a/index.js b/index.js index 23d4f574..93b9a8da 100644 --- a/index.js +++ b/index.js @@ -45,6 +45,11 @@ var httpProxyMiddleware = function (context, opts) { return middleware; function middleware (req, res, next) { + // https://github.com/chimurai/http-proxy-middleware/issues/17 + if (req.baseUrl) { + req.url = req.originalUrl; + } + if (contextMatcher.match(config.context, req.url)) { if (proxyOptions.proxyTable) { // change option.target when proxyTable present. diff --git a/test/http-proxy-middleware.spec.js b/test/http-proxy-middleware.spec.js index 71aed606..53ee8045 100644 --- a/test/http-proxy-middleware.spec.js +++ b/test/http-proxy-middleware.spec.js @@ -494,14 +494,50 @@ describe('http-proxy-middleware in actual server', function () { }); }); + describe('express with path + proxy', function () { + var proxyServer, targetServer; + var responseBody; + + beforeEach(function (done) { + var mw_proxy = proxyMiddleware('http://localhost:8000'); + var mw_target = function (req, res, next) { + res.write(req.url); // respond with req.url + res.end(); + }; + + proxyServer = createServer(3000, mw_proxy, '/api'); + targetServer = createServer(8000, mw_target); + + http.get('http://localhost:3000/api/foo/bar', function (res) { + res.on('data', function (chunk) { + responseBody = chunk.toString(); + done(); + }); + }); + }); + + afterEach(function () { + proxyServer.close(); + targetServer.close(); + }); + + it('should proxy to target with the baseUrl', function () { + expect(responseBody).to.equal('/api/foo/bar'); + }); + + }); }); -function createServer (portNumber, middleware) { +function createServer (portNumber, middleware, path) { var app = express(); - if (middleware) { + if (middleware, path) { + console.log('pathpathpathpathpathpathpath: ', path); + app.use(path, middleware); + } + else if (middleware) { app.use(middleware); }