Added JSON cookie support & tests. Closes #879

This commit is contained in:
Tj Holowaychuk
2011-11-10 12:04:21 -08:00
parent e27b224933
commit 7ac857acef
3 changed files with 64 additions and 2 deletions

View File

@@ -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);

43
test/req.cookies.js Normal file
View File

@@ -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();
})
})
})
})

View File

@@ -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();