diff --git a/index.js b/index.js index eaf7036c..8589713a 100644 --- a/index.js +++ b/index.js @@ -196,12 +196,15 @@ function session(options){ return false; } + var _finished = res.finished; + res.finished = true; ended = true; var ret; var sync = true; function writeend() { + res.finished = _finished; if (sync) { ret = _end.call(res, chunk, encoding); sync = false; @@ -262,6 +265,8 @@ function session(options){ // no session to save if (!req.session) { debug('no session'); + + res.finished = _finished; return _end.call(res, chunk, encoding); } @@ -280,6 +285,7 @@ function session(options){ return writetop(); } + res.finished = _finished; return _end.call(res, chunk, encoding); }; diff --git a/test/session.js b/test/session.js index 704b8de2..df3431c5 100644 --- a/test/session.js +++ b/test/session.js @@ -1,4 +1,3 @@ - process.env.NO_DEPRECATION = 'express-session'; var after = require('after') @@ -349,6 +348,25 @@ describe('session()', function(){ done() }) }) + + it('should finish response', function(done) { + var finished = false; + var store = new session.MemoryStore() + var server = createServer({ store: store }, function (req, res) { + req.session.hit = true + res.write('hello, ') + res.end('world') + finished = res.finished + }) + + request(server) + .get('/') + .expect(200, 'hello, world', function(err) { + if (err) return done(err) + finished.should.be.true + done() + }) + }) }) describe('when sid not in store', function () {