我根据用户的角色创建了一个动态菜单栏。在服务器端,当用户登录时,我将所有允许的页面存储在他们的会话中。
现在,我有15个模板。我在每个页面上都包含menubar.html
文件。我想在menubar.html
中使用会话数据,而不必每次都明确地传递它。
我尝试过以下代码:
app.get('/home',function(req,res)){
res.render('home',{menu : req.session.menubar})
}
app.get('/contact',function(req,res)){
res.render('contact',{menu : req.session.menubar})
}
在上面的代码中,我需要在每个页面上传递会话数据。如果我有50个html模板,那么在每个路径中传递会话效率都不高。
处理此问题的最佳方法是什么?
答案 0 :(得分:1)
由于EJS
基于转义为JavaScript
,因此可以使用语言中的循环结构来完成渲染列表。
要在ejs模板上显示数组的值,可以使用以下代码:
<ul class="menubar">
<% for(var i=0; i < menu.length; i++) { %>
<li class="menu-title">
<%= menu[i] %>
</li>
<% } %>
答案 1 :(得分:1)
您是否包含了this answer
假设您使用的是express-session,您可能还需要设置中间件以将会话信息分配给响应(res
),如{ {3}}
<强> app.js 强>:
app.use(session({
secret: "sosecret",
saveUninitialized: false,
resave: false
}));
// middleware to make 'user' available to all templates
app.use(function(req, res, next) {
res.locals.user = req.session.user;
next();
});
然后尝试引用res.locals.user
而不是请求对象。
答案 2 :(得分:0)
为了在每个模板上使用它,您需要首先将会话存储在数据库集合中。为此,您使用success: function (response) {
if (response) {
alert("exists");
}
else {
alert("not exists");
}
}
软件包。从文档中:
connect-mongo