表示cookie返回undefined

我试图在express.js上设置cookie,但它返回undefined。 我search了很多网页,并把app.use(app.router)上面的express.cookieParser() ,但它仍然不能返回正确的值。

app.js

 app.configure(function(){ var RedisStore = require('connect-redis')(express); app.use(express.logger()); app.set('view options', { layout: false }); app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.bodyParser({uploadDir: './uploads/tmp'})); app.use(express.methodOverride()); app.use(express.cookieParser()); app.use(express.session({ secret: "william", store: new RedisStore })); //Initialize Passport! Also use passport.session() middleware, to support //persistent login sessions (recommended). app.use(passport.initialize()); app.use(passport.session()); //app.router should be after passportjs app.use(app.router); app.use(express.compiler({ src: __dirname + '/public', enable: ['less']})); app.use(express.static(path.join(__dirname, 'public'))); }); app.get('/', function(req, res) { res.cookie('cart', 'test', {maxAge: 900000, httpOnly: true}) }); app.get('/test', function(req, res) { res.send('testcookie: ' + req.cookies.cart); }); 

结果:

 testcookie: undefined 

Cookie在HTTP标题中设置。 res.cookie()只是为你的HTTP结果设置标题,但实际上并不发送任何HTTP。 如果你的代码在语法上是正确的并且运行了,那么它实际上只是坐下来而不会返回任何东西。 我也修正了这个app.get()中的代码中的一些语法错误:

 app.get('/', function(req, res) { res.cookie('cart', 'test', {maxAge: 900000, httpOnly: true}); res.send('Check your cookies. One should be in there now'); }); 

你需要发送一些东西,或者至less在设置cookie之后调用res.end() 。 否则,所有res.cookie()都会将一些标题添加到将在稍后发送的标题列表中。

将cookie名称设置为value,其中可能是string或转换为JSON的对象。 path选项默认为“/”。

 res.cookie('name', 'tobi', { domain: '.example.com', path: '/admin', secure: true }); 

这是更详细的链接

http://expressjs.com/api.html#res.cookie