我想将会话对象传递给我的所有视图,因此我不必在每个路径中手动传递它们。 在我曾经学过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个内部错误:会话未定义。
有什么想法吗?
答案 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%>
并显示它(因为只有我已经在我的某些路线中设置了该会话变量,即在登录后)。