在Express 4中无法通过请求发送cookie

时间:2015-03-21 04:37:11

标签: javascript session cookies express express-4

这是我的初始配置:

var session         = require('express-session');
var cookieParser    = require('cookie-parser');
app.use(session({
  saveUninitialized: true,
  resave: false,
  genid: function(req) {
    return Services.misc.generateUUID()
  },
  secret: secret.toString()
}));
app.use(cookieParser(secret));

然后在我的控制器中(它通过一个死的简单路由器路由到控制器,然后根据类似Rails的命名约定呈现适当的操作)我会做这样的事情:

var TestController = {
  noaction: function(req, res) {
    var locals = {
      billy: 'the goat'
    }

    console.log('req session'.red, req.session);
    res.cookie('test_cookie', 'Wu Tang Clan');

    this.services.render.view(req, res, this, 200, locals);
  }

module.exports = TestController;

请注意,this.services.render.view只是一项服务,因此我无需撰写res.render('./app/controllers' + controller + '/' + action)

注意控制器中的res.cookie行(docs on express.js)。这就是官方文档要做的事情,事实上,它会在浏览器中设置:

enter image description here

但是,res.cookie上面的行是一个日志,我想我们会有test_cookie,但是:

enter image description here

我所得到的只是一个标准的空白cookie,即使它设置了浏览器端并且据称正在发送。

我的问题是:如何在Express 4中正确设置和接收Cookie?

2 个答案:

答案 0 :(得分:1)

以下是答案:每次nodemon重新启动服务器以传播代码更​​改时,都会清除会话。

答案 1 :(得分:1)

您的代码似乎没问题,因为dsp_099说,它可能是nodemon。 快速会话将数据保存在内存中,因此当您重新启动服务器时(自动使用nodemon),将重置所有内存数据。

即使节点重新启动,我还想保留会话数据,我建议您使用redis-session(Redis数据库)