Nodejs将3个会话对象传递给所有视图

我想将会话对象传递给我的所有视图,所以我不必在每个路由中手动传递它们。 在我用来学习nodejs的书中,有一个例子,但是对于expression式2:

//session routes module.exports = function(app){ app.dynamicHelpers({ session: function(req, res){ return req.session; } }); app.get(...... res.render(.... .... } 

所以dynamicHelpers已被replace。 我在stackoverflow上find了一些东西:

  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内部错误:会话未定义。

有什么想法吗 ?

我想到了。 问题是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%> ,它将被显示(因为只有当我已经在login后的某些路由中设置了会话variables)。