如何在express,couchDB和node.js中使用会话

Ern*_*o11 23 javascript session node.js express

所以我基本上想要使用会话来存储用户名,并检查用户是否登录.如果没有,页面将重定向到登录页面.

我正在使用Node.js,express和couchDB.

这是我到目前为止如何设置我的会话

var MemoryStore = require('connect').session.MemoryStore;
app.use(express.cookieParser());
app.use(express.session({ 
    secret: "keyboard cat", 
    store: new MemoryStore({ 
        reapInterval: 60000 * 10
    })
}));
Run Code Online (Sandbox Code Playgroud)

要在会话中存储内容,我使用以下代码吗?

req.session = {user:name);
Run Code Online (Sandbox Code Playgroud)

所以会话变量似乎在我的登录页面上工作.我成功地将用户的名称存储到会话中但是,当我尝试访问另一个页面上的会话变量时,它会给我错误

Cannot read property 'user' of undefined
Run Code Online (Sandbox Code Playgroud)

我所做的就是:

if (req.session.user){
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种错误?会话不是整个应用程序的全局?或者我在这里完全遗漏了一些东西.

提前致谢!

Mik*_*ott 71

如果您在app.use(app.router)设置cookie和会话处理的行之前进行操作,请尝试将其移至它们之后.这对我来说解决了同样的问题.

  • @ Ernesto11你应该给这个绿色检查:)它对我也有用 (8认同)
  • @ Ernesto11请接受这个答案.它也适合我! (3认同)
  • 好的,是的.现在一切都有效.Idk为什么不早点.非常感谢! (2认同)
  • 只是为了澄清,我有同样的问题,但这根本不能解决这个问题.但我发现你必须按照该顺序将cookieParser,session和router放在配置的末尾.希望有人更多帮助! (2认同)

小智 4

在过去的几个小时里,我试图为他解决完全相同的问题。

尝试像这样初始化你的服务器:

var app = express.createServer(
express.cookieParser(),
express.session({ secret: "crazysecretstuff"})
  );
Run Code Online (Sandbox Code Playgroud)

那应该有效。