Skip to content

Commit 620e9ae

Browse files
committed
fix(server-middleware): allow res.end -> next() in middeware flow when no serveStatic exists - fixes #1481
1 parent 148ac02 commit 620e9ae

File tree

2 files changed

+49
-9
lines changed

2 files changed

+49
-9
lines changed

lib/server/utils.js

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -241,20 +241,23 @@ var serverUtils = {
241241
return !x.override;
242242
})
243243
.concat(
244-
bs.options.get("mode") !== "proxy" && {
245-
id: "Browsersync 404/index support",
246-
route: "",
247-
handle: serveIndex(bs.options.get("cwd"), {
248-
icons: true,
249-
view: "details"
250-
})
251-
}
244+
bs.options.get("mode") !== "proxy" &&
245+
userMiddlewares.length === 0 && {
246+
id: "Browsersync 404/index support",
247+
route: "",
248+
handle: serveIndex(bs.options.get("cwd"), {
249+
icons: true,
250+
view: "details"
251+
})
252+
}
252253
);
253254

254-
return []
255+
const mwStack = []
255256
.concat(beforeMiddlewares, defaultMiddlewares, afterMiddlewares)
256257
.filter(Boolean);
257258

259+
return mwStack;
260+
258261
function normaliseMiddleware(item) {
259262
/**
260263
* Object given in options, which

test/specs/e2e/middleware/middleware.server.option.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,3 +189,40 @@ describe("Accepting multiple server middlewares as top-level option", function()
189189
});
190190
});
191191
});
192+
193+
describe("Allow middlewares to call next() after res.end if no server provided", function() {
194+
var bs;
195+
196+
before(function(done) {
197+
browserSync.reset();
198+
199+
var fn = function(req, res, next) {
200+
res.write('bs');
201+
res.end();
202+
next();
203+
};
204+
205+
var config = {
206+
logLevel: "silent",
207+
open: false,
208+
middleware: fn
209+
};
210+
211+
bs = browserSync.init(config, done).instance;
212+
});
213+
214+
after(function() {
215+
bs.cleanup();
216+
});
217+
218+
it("should call the middlewares", function(done) {
219+
request(bs.server)
220+
.get("/")
221+
.set("accept", "text/html")
222+
.expect(200)
223+
.end(function(err, res) {
224+
assert.include(res.text, 'bs');
225+
done();
226+
});
227+
});
228+
});

0 commit comments

Comments
 (0)