我正在快递js中进行登录页面。我想在所有视图页面中显示登录的用户名。我使用session在视图页面中显示名称。它正在工作,但我想为每个渲染页面设置会话值,如下所示。
控制器:
res.render('index.hbs',{data:req.session.username});
查看(HBS):
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<img src="img/atomix_user31.png" class="user-image" alt="User Image">
<span class="hidden-xs">{{data}}</span>
</a>
对于每个渲染页面,我需要附加上面给出的值。有没有办法设置全局变量来访问所有页面中的登录用户名。
答案 0 :(得分:3)
传递给视图的值将从3组值合并:
app.locals
的对象。res.locals
。res.locals.data = req.session.username;
res.render('index.hbs');
。您不会将用户的名称放在router.get('/*', function(req, res, next) {
res.locals.data = req.session.username;
next();
});
中,因为它在所有请求之间共享,但{{1}}特定于当前请求/响应,因此可以使用:
{{1}}
然后,您可以将第一行移动到链中的其他位置。例如,像这样:
{{1}}
您需要准确调整此路线的注册方式以适合您的应用。这需要在填充会话之后但在渲染视图之前放置。
请参阅:
答案 1 :(得分:0)
假设你有一个相对简单的代码结构,我会创建一个渲染器函数/模块来执行你想要在所有视图中完成的所有常见任务
e.g:
function myRender(req, res, placeholders) {
var my_locals = {data:req.session.username};
return res.render('index.hbs', _.merge(my_locals, placeholders));
}
如果您的代码是异步的,并且您无法访问请求,则可以使用https://github.com/othiym23/node-continuation-local-storage之类的模块暂时存储它。