From 620e9ae3f3a00624315c6c5d1c121cac3fd6bfde Mon Sep 17 00:00:00 2001 From: Shane Osbourne Date: Fri, 5 Jan 2018 07:45:00 +0000 Subject: [PATCH] fix(server-middleware): allow res.end -> next() in middeware flow when no serveStatic exists - fixes #1481 --- lib/server/utils.js | 21 ++++++----- .../middleware/middleware.server.option.js | 37 +++++++++++++++++++ 2 files changed, 49 insertions(+), 9 deletions(-) diff --git a/lib/server/utils.js b/lib/server/utils.js index 16ffb9c1e..f396a9561 100644 --- a/lib/server/utils.js +++ b/lib/server/utils.js @@ -241,20 +241,23 @@ var serverUtils = { return !x.override; }) .concat( - bs.options.get("mode") !== "proxy" && { - id: "Browsersync 404/index support", - route: "", - handle: serveIndex(bs.options.get("cwd"), { - icons: true, - view: "details" - }) - } + bs.options.get("mode") !== "proxy" && + userMiddlewares.length === 0 && { + id: "Browsersync 404/index support", + route: "", + handle: serveIndex(bs.options.get("cwd"), { + icons: true, + view: "details" + }) + } ); - return [] + const mwStack = [] .concat(beforeMiddlewares, defaultMiddlewares, afterMiddlewares) .filter(Boolean); + return mwStack; + function normaliseMiddleware(item) { /** * Object given in options, which diff --git a/test/specs/e2e/middleware/middleware.server.option.js b/test/specs/e2e/middleware/middleware.server.option.js index 15d2e7575..014eeb12a 100644 --- a/test/specs/e2e/middleware/middleware.server.option.js +++ b/test/specs/e2e/middleware/middleware.server.option.js @@ -189,3 +189,40 @@ describe("Accepting multiple server middlewares as top-level option", function() }); }); }); + +describe("Allow middlewares to call next() after res.end if no server provided", function() { + var bs; + + before(function(done) { + browserSync.reset(); + + var fn = function(req, res, next) { + res.write('bs'); + res.end(); + next(); + }; + + var config = { + logLevel: "silent", + open: false, + middleware: fn + }; + + bs = browserSync.init(config, done).instance; + }); + + after(function() { + bs.cleanup(); + }); + + it("should call the middlewares", function(done) { + request(bs.server) + .get("/") + .set("accept", "text/html") + .expect(200) + .end(function(err, res) { + assert.include(res.text, 'bs'); + done(); + }); + }); +});