我希望我的会话在所有视图(*.ejs)中都可用,而不必在每个动作上传递它.我的代码如下所示,但req.session对象在这里始终为null,即使在我的"控制器"中,我可以在用户通过身份验证后访问会话对象,方法是:
req.session.whatever
Run Code Online (Sandbox Code Playgroud)
我的初始化代码(当前在每个请求上执行(我使用调试断点进行双重检查)是:
var appendLocalsToUseInViews = function(req, res, next)
{
//append request and session to use directly in views and avoid passing around needless stuff
res.locals.request = req;
if(req.session != null && req.session.user != null)
{
res.locals.user = req.session.user;
}
next(null, req, res);
};
Run Code Online (Sandbox Code Playgroud)
我在app setup preamble中注册了这个函数:
app.use(appendLocalsToUseInViews);
Run Code Online (Sandbox Code Playgroud)
我见过人们使用app.use方法和dynamicHelpers.我正在使用express 3,看起来它们已经消失了,从Express 2中弃用了......但这似乎不是重点,因为函数在每个请求上都被正确调用.如何在这种预控制器代码中访问Express会话?
谢谢!
解决方案感谢Jani Hartikainen:
在会话中间件加载并运行后,我将代码移动到了!这是新代码.
app.use(express.cookieParser(appSecret));
app.use(express.session({ secret: appSecret }));
---->>>app.use(appendLocalsToUseInViews);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1399 次 |
| 最近记录: |