Nodejs向所有视图表达3个传递会话对象

时间:2014-04-15 12:18:10

标签: node.js session express

我想将会话对象传递给我的所有视图,因此我不必在每个路径中手动传递它们。 在我曾经学过nodejs的书中,有一个例子,但对于表达2:

//session routes

module.exports = function(app){

  app.dynamicHelpers({
    session: function(req, res){
       return req.session;
    }
  });

  app.get(......
    res.render(....
  ....

}

所以dynamicHelpers已被替换。我在stackoverflow上发现了一些东西:

  app.use(function(req, res, next){
    res.locals.session = req.session;
    next();
  });

我也在快递文档上找到了

  app.use(function(req, res, next){
    app.locals.session = req.session;
    next();
  });

无论如何,在我看来,我有类似<%=session.user%>的东西,在我的路线的某个地方,req.session.user = "John",我总是得到500个内部错误:会话未定义。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我明白了。问题是res.locals必须在app.js文件中的app.router之前设置(不在路由文件中)!

通过设置我的app.js文件:

app.use(express.cookieParser(hash));
app.use(express.session({
    secret: hash,
    maxAge: 3600000 
}));
app.use(function(req, res, next){
    res.locals.session = req.session;
    next();
});
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

我甚至不需要触摸我的路线文件来发送会话对象。在我看来,我可以使用<%=session.whatever%>并显示它(因为只有我已经在我的某些路线中设置了该会话变量,即在登录后)。