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)。