From 7ac857acef7bc62eab31ec38f4cea877c58746ca Mon Sep 17 00:00:00 2001 From: Tj Holowaychuk Date: Thu, 10 Nov 2011 12:04:21 -0800 Subject: [PATCH] Added JSON cookie support & tests. Closes #879 --- lib/response.js | 1 + test/req.cookies.js | 43 +++++++++++++++++++++++++++++++++++++++++++ test/res.cookie.js | 22 ++++++++++++++++++++-- 3 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 test/req.cookies.js diff --git a/lib/response.js b/lib/response.js index 48452745..d76efae2 100644 --- a/lib/response.js +++ b/lib/response.js @@ -370,6 +370,7 @@ res.clearCookie = function(name, options){ res.cookie = function(name, val, options){ options = options || {}; + if ('object' == typeof val) val = 'j:' + JSON.stringify(val); if ('maxAge' in options) options.expires = new Date(Date.now() + options.maxAge); if (undefined === options.path) options.path = this.app.set('root'); var cookie = utils.serializeCookie(name, val, options); diff --git a/test/req.cookies.js b/test/req.cookies.js new file mode 100644 index 00000000..acf129fe --- /dev/null +++ b/test/req.cookies.js @@ -0,0 +1,43 @@ + +var express = require('../') + , request = require('./support/http'); + +describe('req', function(){ + describe('.cookies', function(){ + it('should expose cookie data', function(done){ + var app = express(); + + app.use(express.cookieParser()); + + app.use(function(req, res){ + res.end(req.cookies.name + ' ' + req.cookies.species); + }); + + request(app) + .get('/') + .set('Cookie', 'name=tobi; species=ferret') + .end(function(res){ + res.body.should.equal('tobi ferret'); + done(); + }) + }) + + it('should parse JSON cookies', function(done){ + var app = express(); + + app.use(express.cookieParser()); + + app.use(function(req, res){ + res.end(req.cookies.user.name); + }); + + request(app) + .get('/') + .set('Cookie', 'user=j%3A%7B%22name%22%3A%22tobi%22%7D') + .end(function(res){ + res.body.should.equal('tobi'); + done(); + }) + }) + }) +}) diff --git a/test/res.cookie.js b/test/res.cookie.js index d1b6e79b..de1e662b 100644 --- a/test/res.cookie.js +++ b/test/res.cookie.js @@ -3,7 +3,25 @@ var express = require('../') , request = require('./support/http'); describe('res', function(){ - describe('.cookie(name, value)', function(){ + describe('.cookie(name, object)', function(){ + it('should generate a JSON cookie', function(done){ + var app = express(); + + app.use(function(req, res){ + res.cookie('user', { name: 'tobi' }).end(); + }); + + request(app) + .get('/') + .end(function(res){ + var val = ['user=j%3A%7B%22name%22%3A%22tobi%22%7D; path=/']; + res.headers['set-cookie'].should.eql(val); + done(); + }) + }) + }) + + describe('.cookie(name, string)', function(){ it('should set a cookie', function(done){ var app = express(); @@ -57,7 +75,7 @@ describe('res', function(){ }) }) - describe('.cookie(name, value, options)', function(){ + describe('.cookie(name, string, options)', function(){ it('should set params', function(done){ var app = express();