【问题标题】:Using Session MemoryStore in Express.js does not define req.session在 Express.js 中使用 Session MemoryStore 没有定义 req.session
【发布时间】:2023-03-19 18:40:02
【问题描述】:

我已经使用 Express.js 设置了一个 Node.js 测试服务器,如下所示:

var express     = require('express');
var MemoryStore = express.session.MemoryStore;
var app         = express.createServer();

app.configure(function() {
    app.use(express.bodyParser());
    app.use(express.cookieParser());
    app.use(app.router);
    app.use(express.session({
        store: new MemoryStore(),
        secret: 'secret',
        key: 'bla'
    }));
});

app.get('/', function(req, res){
    console.log(req.session);
    res.end("html");
});

app.listen(3000);

为什么console.log(req.session) 打印出未定义?我没有正确使用它吗?为了将变量保存到用户的会话中,我需要做什么?

客户端收到一个存储为他的 cookie 的 SID,但我无法为 req.session 分配任何属性,因为它没有定义。感谢您提供解决此问题的任何提示! :-)

这是我正在使用的版本:

├─┬ express@2.5.9
│ ├─┬ connect@1.8.7
│ │ └── formidable@1.0.9
│ ├── mime@1.2.4
│ ├── mkdirp@0.3.0
│ └── qs@0.4.2

【问题讨论】:

  • 你用的是什么版本的快递?
  • 不使用 MemoryStore 是否可以工作?
  • @mihai:很抱歉忘记提及版本 - 我现在已将其编辑到我的帖子中。 @Jonathan:省略store: new MemoryStore(), 不会改变任何东西。遗憾的是,我没有另一个会话存储可以测试它是否有效。

标签: session node.js express


【解决方案1】:

这是您的问题:app.use(app.router) 将您的路由安装在调用链中的那个位置。你有它之前你的会话中间件,所以还没有req.session。当您将其省略时,每当您执行第一个app.get(或app.post 等)时,您的路线就会被定位。如果您仍希望控制路由的位置,只需将 app.use(app.router) 移动到会话中间件下方即可。

请参阅 Express 的 Configuration 和 Middleware 文档。

【讨论】:

  • 你是对的,删除它后一切都按预期工作。你的答案当然和米海的一样好,但我接受了他的答案,因为他是第一个。非常感谢您的精彩解释!! :-)
【解决方案2】:

我不知道app.router 是什么,但它似乎是问题的原因。删除该行使其对我有用。

【讨论】:

  • 好吧,我不知道是什么魔法把这行代码放到了我的代码中。 :D 谢谢,删除它有帮助,我的路线仍然有效。
  • 来自:stackoverflow.com/questions/10191692/… 似乎在 express.session 之前使用(app.router)会破坏它......在工作之后拥有它。仅供参考:)
  • @Linus G Thiel 下面的回答更合适。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
  • 2019-01-19
  • 2013-12-11
  • 2014-08-20
  • 2018-10-30
相关资源
最近更新 更多