From 55f1069696e12088e0b1e917e4c07d4c05ba6132 Mon Sep 17 00:00:00 2001 From: Steven Chim Date: Wed, 9 Sep 2015 18:02:50 +0200 Subject: [PATCH] Enable subscription to the http-proxy on onProxyReq event. --- README.md | 10 ++++++++ index.js | 5 ++++ package.json | 2 +- test/http-proxy-middleware.spec.js | 38 ++++++++++++++++++++++++++++++ 4 files changed, 54 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4a25b4d3..4281d6de 100644 --- a/README.md +++ b/README.md @@ -181,6 +181,15 @@ var server = app.listen(3000); } ``` +* **option.onProxyReq**: function, subscribe to http-proxy's proxyReq event. + ```javascript + function onProxyReq(proxyReq, req, res) { + // add custom header to request + proxyReq.setHeader('x-added', 'foobar'); + // or log the req + } + ``` + * (DEPRECATED) **option.proxyHost**: Use `option.changeOrigin = true` instead. The following options are provided by the underlying [http-proxy](https://www.npmjs.com/package/http-proxy). @@ -248,6 +257,7 @@ $ npm run cover ## Changelog +* [v0.8.1](https://github.com/chimurai/http-proxy-middleware/releases/tag/v0.8.1) - fixed pathRewrite when `agent` is configured * [v0.8.0](https://github.com/chimurai/http-proxy-middleware/releases/tag/v0.8.0) - support external websocket upgrade, fixed websocket shorthand * [v0.7.0](https://github.com/chimurai/http-proxy-middleware/releases/tag/v0.7.0) - support shorthand syntax, fixed express/connect mounting * [v0.6.0](https://github.com/chimurai/http-proxy-middleware/releases/tag/v0.6.0) - support proxyTable diff --git a/index.js b/index.js index ccfabe34..6543576b 100644 --- a/index.js +++ b/index.js @@ -22,6 +22,11 @@ var httpProxyMiddleware = function (context, opts) { proxy.on('proxyRes', proxyOptions.onProxyRes); } + // Custom listener for the `proxyReq` event on `proxy`. + if (_.isFunction(proxyOptions.onProxyReq)) { + proxy.on('proxyReq', proxyOptions.onProxyReq); + } + // Custom listener for the `error` event on `proxy`. var onProxyError = getProxyErrorHandler(); // handle error and close connection properly diff --git a/package.json b/package.json index 7778a728..49a10a35 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "http-proxy-middleware", - "version": "0.8.0", + "version": "0.8.1", "description": "The one-liner node.js proxy middleware for connect, express and browser-sync", "main": "index.js", "scripts": { diff --git a/test/http-proxy-middleware.spec.js b/test/http-proxy-middleware.spec.js index 53ee8045..c515e79c 100644 --- a/test/http-proxy-middleware.spec.js +++ b/test/http-proxy-middleware.spec.js @@ -424,6 +424,44 @@ describe('http-proxy-middleware in actual server', function () { }); }); + describe('option.onProxyReq', function () { + var proxyServer, targetServer; + var receivedRequest; + + beforeEach(function (done) { + var fnOnProxyReq = function (proxyReq, req, res) { + proxyReq.setHeader('x-added', 'foobar'); // add custom header to request + }; + + var mw_proxy = proxyMiddleware('/api', { + target: 'http://localhost:8000', + onProxyReq: fnOnProxyReq + }); + + var mw_target = function (req, res, next) { + receivedRequest = req; + res.write(req.url); // respond with req.url + res.end(); + }; + + proxyServer = createServer(3000, mw_proxy); + targetServer = createServer(8000, mw_target); + + http.get('http://localhost:3000/api/foo/bar', function () { + done(); + }); + }); + + afterEach(function () { + proxyServer.close(); + targetServer.close(); + }); + + it('should add `x-added` as custom header to request"', function () { + expect(receivedRequest.headers['x-added']).to.equal('foobar'); + }); + }); + describe('option.pathRewrite', function () { var proxyServer, targetServer; var responseBody;