diff --git a/HISTORY.md b/HISTORY.md index 5e36579..eea378e 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,6 +1,7 @@ unreleased ================== + * Prevent writing a response after headers are sent while flushing the request * deps: * debug@^4.4.3 * statuses@^2.0.2 diff --git a/index.js b/index.js index bf15e48..1c060fb 100644 --- a/index.js +++ b/index.js @@ -243,6 +243,11 @@ function getResponseStatusCode (res) { function send (req, res, status, headers, message) { function write () { + if (res.headersSent) { + debug('cannot %d after headers sent', status) + return + } + // response body var body = createHtmlDocument(message) diff --git a/test/test.js b/test/test.js index 516e088..966b3e5 100644 --- a/test/test.js +++ b/test/test.js @@ -525,6 +525,17 @@ var topDescribe = function (type, createServer) { }) describe('request started', function () { + it('should not respond after headers are sent while flushing the request', function (done) { + var server = createServer(function (req, res) { + finalhandler(req, res)() + res.end('respond not by finalhandler') + }) + + wrapper(request(server) + .post('/foo')) + .expect(200, 'respond not by finalhandler', done) + }) + it('should not respond', function (done) { var server = createServer(function (req, res) { var done = finalhandler(req, res)