diff --git a/HISTORY.md b/HISTORY.md index 29e5657a..c0f46aa2 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -2,6 +2,7 @@ unreleased ========== * Add `priority` to `cookie` options + * Fix handling errors from setting cookie * Support any type in `secret` that `crypto.createHmac` supports * deps: cookie@0.5.0 - Fix `expires` option to reject invalid dates diff --git a/index.js b/index.js index 40a442ba..981262cc 100644 --- a/index.js +++ b/index.js @@ -240,7 +240,11 @@ function session(options) { } // set cookie - setcookie(res, name, req.sessionID, secrets[0], req.session.cookie.data); + try { + setcookie(res, name, req.sessionID, secrets[0], req.session.cookie.data) + } catch (err) { + defer(next, err) + } }); // proxy end() to commit the session diff --git a/test/session.js b/test/session.js index 755017d1..e1b6419b 100644 --- a/test/session.js +++ b/test/session.js @@ -1945,6 +1945,23 @@ describe('session()', function(){ .expect(200, done) }) + it('should forward errors setting cookie', function (done) { + var cb = after(2, done) + var server = createServer({ cookie: { expires: new Date(NaN) } }, function (req, res) { + res.end() + }) + + server.on('error', function onerror (err) { + assert.ok(err) + assert.strictEqual(err.message, 'option expires is invalid') + cb() + }) + + request(server) + .get('/admin') + .expect(200, cb) + }) + it('should preserve cookies set before writeHead is called', function(done){ var server = createServer(null, function (req, res) { var cookie = new Cookie()