From 497653d92e0f085580c6b8727114745a1e88a072 Mon Sep 17 00:00:00 2001 From: Lloyd Brookes Date: Tue, 31 May 2016 09:31:44 +0100 Subject: [PATCH 1/4] proxy connection errors no longer crash the server, fixes #37 --- bin/cli.js | 6 ++++++ example/rewrite/.local-web-server.json | 1 + example/rewrite/index.html | 2 ++ lib/middleware.js | 21 +++++++++++---------- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/bin/cli.js b/bin/cli.js index 8de7ca6..056796a 100755 --- a/bin/cli.js +++ b/bin/cli.js @@ -62,6 +62,12 @@ if (options.misc.help) { mocks: options.server.mocks }) + app.on('error', err => { + if (options.server['log-format']) { + console.error(ansi.format(err.message, 'red')) + } + }) + if (options.server.https) { options.server.key = path.resolve(__dirname, '..', 'ssl', '127.0.0.1.key') options.server.cert = path.resolve(__dirname, '..', 'ssl', '127.0.0.1.crt') diff --git a/example/rewrite/.local-web-server.json b/example/rewrite/.local-web-server.json index ae46592..1eb9003 100644 --- a/example/rewrite/.local-web-server.json +++ b/example/rewrite/.local-web-server.json @@ -2,6 +2,7 @@ "rewrite": [ { "from": "/css/*", "to": "/build/styles/$1" }, { "from": "/npm/*", "to": "http://registry.npmjs.org/$1" }, + { "from": "/broken/*", "to": "http://localhost:9999" }, { "from": "/:user/repos/:name", "to": "https://api.github.com/repos/:user/:name" } ] } diff --git a/example/rewrite/index.html b/example/rewrite/index.html index 2711101..02dcfd3 100644 --- a/example/rewrite/index.html +++ b/example/rewrite/index.html @@ -9,6 +9,7 @@ "rewrite": [ { "from": "/css/*", "to": "/build/styles/$1" }, { "from": "/npm/*", "to": "http://registry.npmjs.org/$1" }, + { "from": "/broken/*", "to": "http://localhost:9999" }, { "from": "/:user/repos/:name", "to": "https://api.github.com/repos/:user/:name" } ] } @@ -18,5 +19,6 @@ diff --git a/lib/middleware.js b/lib/middleware.js index 559adac..984b768 100644 --- a/lib/middleware.js +++ b/lib/middleware.js @@ -15,14 +15,13 @@ exports.blacklist = blacklist exports.mockResponses = mockResponses exports.mime = mime -function proxyRequest (route, app) { +function proxyRequest (route) { const httpProxy = require('http-proxy') const proxy = httpProxy.createProxyServer({ changeOrigin: true }) return function proxyMiddleware () { - const next = arguments[arguments.length - 1] const keys = [] route.re = pathToRegexp(route.from, keys) route.new = this.url.replace(route.re, route.to) @@ -33,17 +32,19 @@ function proxyRequest (route, app) { .replace(re, arguments[index + 1] || '') }) - this.response = false debug('proxy request', `from: ${this.path}, to: ${url.parse(route.new).href}`) - proxy.once('error', err => { - this.throw(500, `[PROXY] ${err.message}: ${route.new}`) - }) - proxy.once('proxyReq', function (proxyReq) { - proxyReq.path = url.parse(route.new).path + return new Promise((resolve, reject) => { + proxy.once('error', err => { + err.message = `[PROXY] Error: ${err.message} Target: ${route.new}` + reject(err) + }) + proxy.once('proxyReq', function (proxyReq) { + proxyReq.path = url.parse(route.new).path + }) + proxy.once('close', resolve) + proxy.web(this.req, this.res, { target: route.new }) }) - - proxy.web(this.req, this.res, { target: route.new }) } } From a9da4502477fada555296190d7b73bb9ba4f9c7b Mon Sep 17 00:00:00 2001 From: Lloyd Brookes Date: Tue, 31 May 2016 09:31:56 +0100 Subject: [PATCH 2/4] 1.2.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9d5bd03..6c77024 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "local-web-server", - "version": "1.2.4", + "version": "1.2.5", "description": "A simple web-server for productive front-end development", "bin": { "ws": "./bin/cli.js" From 290629602ee1f79ebe345da66af9dfc9f2f5351b Mon Sep 17 00:00:00 2001 From: Lloyd Brookes Date: Thu, 9 Jun 2016 16:49:48 +0100 Subject: [PATCH 3/4] proxy: permit insecure targets --- lib/middleware.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/middleware.js b/lib/middleware.js index 984b768..650a7a0 100644 --- a/lib/middleware.js +++ b/lib/middleware.js @@ -18,7 +18,8 @@ exports.mime = mime function proxyRequest (route) { const httpProxy = require('http-proxy') const proxy = httpProxy.createProxyServer({ - changeOrigin: true + changeOrigin: true, + secure: false }) return function proxyMiddleware () { From 391ab5e604dab3b94a1b8e42b7e98fe423640359 Mon Sep 17 00:00:00 2001 From: Lloyd Brookes Date: Thu, 9 Jun 2016 16:50:12 +0100 Subject: [PATCH 4/4] 1.2.6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6c77024..8147a74 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "local-web-server", - "version": "1.2.5", + "version": "1.2.6", "description": "A simple web-server for productive front-end development", "bin": { "ws": "./bin/cli.js"