所有视图中的NodeJS +会话对象,而不是在所有控制器操作上传递它
我希望我的会话可以在所有视图(* .ejs)中使用,而无需在每个操作中传递它。 我的代码如下所示,但req.session对象始终为null,即使在我的“控制器”中,我可以在用户通过身份validation后访问会话对象,方法是指定:
req.session.whatever
我的初始化代码(当前在每个请求上执行(我使用debugging断点进行双重检查)是:
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); };
我在应用程序设置序言中注册了这个function:
app.use(appendLocalsToUseInViews);
我看到人们使用app.use方法和dynamicHelpers。 我使用快递3,似乎他们走了,从快递2弃用…但这似乎并不重要,因为function正在每个请求正确调用。 如何在这种前置控制器代码中访问Express会话?
谢谢!
解决scheme感谢Jani Hartikainen:
我将代码移动到会话中间件加载完成之后, 这是新的代码。
app.use(express.cookieParser(appSecret)); app.use(express.session({ secret: appSecret })); ---->>>app.use(appendLocalsToUseInViews);
这应该工作,但确保你的app.use
这只是在你已经初始化你的会话中间件。 如果在初始化会话中间件之前已经有了它,它将会在链中运行,因此数据将不可用。
- 如何创build基于nodejs的url不同的会话?
- Express – socket.io – 会话。 将用户标识作为套接字标识
- 使用快速会话在MEAN应用程序中检查有效会话的最佳方法是什么?
- Node.js无状态/无Cookie会话API身份validation
- 为什么socket.io使用不同的path创build第二个“sid”cookie?
- Express-session和express-socket.io-session在angular2 / typecript环境中不起作用
- 节点Js会话pipe理演示
- Salesforce API会话过期,如何自动重新连接
- 无法在typescript / angular2环境中设置持久会话,在后端设置nodejs