From d80ea0f6be9d55ee4c15e317f33e26e9d997b051 Mon Sep 17 00:00:00 2001 From: Nathan Tran Date: Mon, 22 Jun 2015 03:56:39 +0700 Subject: [PATCH] added support for regex path and rewrite in proxy options --- bin/webpack-dev-server.js | 14 -------------- lib/Server.js | 25 ++++++++++++++++--------- 2 files changed, 16 insertions(+), 23 deletions(-) diff --git a/bin/webpack-dev-server.js b/bin/webpack-dev-server.js index 46bc047dac..b559a84e01 100755 --- a/bin/webpack-dev-server.js +++ b/bin/webpack-dev-server.js @@ -139,18 +139,4 @@ new Server(webpack(wpOpt), options).listen(options.port, options.host, function( console.log("content is served from " + options.contentBase); if(options.historyApiFallback) console.log("404s will fallback to /index.html"); - - if (options.proxy) { - var paths = Object.keys(options.proxy); - paths.forEach(function (path) { - var target; - if (typeof options.proxy[path] === 'string') { - target = options.proxy[path]; - } else { - target = options.proxy[path].target; - } - console.log('proxying '+path+' to '+target); - }); - } - }); diff --git a/lib/Server.js b/lib/Server.js index cfa15bae87..3f8eafa23e 100644 --- a/lib/Server.js +++ b/lib/Server.js @@ -110,15 +110,22 @@ function Server(compiler, options) { }.bind(this)); if (options.proxy) { - var paths = Object.keys(options.proxy); - paths.forEach(function (path) { - var proxyOptions; - if (typeof options.proxy[path] === 'string') { - proxyOptions = {target: options.proxy[path], ws: true}; - } else { - proxyOptions = options.proxy[path]; - } - app.all(path, function (req, res) { + if (!Array.isArray(options.proxy)) { + options.proxy = Object.keys(options.proxy).map(function (path) { + var proxyOptions; + if (typeof options.proxy[path] === 'string') { + proxyOptions = {path: path, target: options.proxy[path]}; + } else { + proxyOptions = options.proxy[path]; + proxyOptions.path = path; + } + return proxyOptions; + }); + } + options.proxy.forEach(function (proxyOptions) { + proxyOptions.ws = proxyOptions.hasOwnProperty('ws') ? proxyOptions.ws : true; + app.all(proxyOptions.path, function (req, res) { + if(typeof proxyOptions.rewrite === 'function') proxyOptions.rewrite(req, proxyOptions); if (proxyOptions.host) { req.headers.host = proxyOptions.host; }