如何使用node.js后端访问EJS模板中的会话数据?
我已经根据用户的角色创建了一个动态菜单栏。在服务器端,当用户登录时,我将在会话中存储所有允许的页面 现在,我有15个模板。我在每一页上都包含了如何使用node.js后端访问EJS模板中的会话数据?,node.js,express,ejs,node-modules,Node.js,Express,Ejs,Node Modules,我已经根据用户的角色创建了一个动态菜单栏。在服务器端,当用户登录时,我将在会话中存储所有允许的页面 现在,我有15个模板。我在每一页上都包含了menubar.html文件。我想在menubar.html中使用会话数据,而不必每次都显式地传递它 我尝试了以下代码: app.get('/home',function(req,res)){ res.render('home',{menu : req.session.menubar}) } app.get('/contact',function(re
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})
}
<ul class="menubar">
<% for(var i=0; i < menu.length; i++) { %>
<li class="menu-title">
<%= menu[i] %>
</li>
<% } %>
在上面的代码中,我需要在每个页面上传递会话数据。如果我有50个html模板,那么在每个路由中传递会话是没有效率的
处理此问题的最佳方法是什么?由于
EJS
基于转义到JavaScript
,因此可以使用语言中的循环结构来完成呈现列表
要在ejs模板上显示数组的值,可以使用以下代码:
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})
}
<ul class="menubar">
<% for(var i=0; i < menu.length; i++) { %>
<li class="menu-title">
<%= menu[i] %>
</li>
<% } %>
res
),如中所示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
而不是请求对象。为了在每个模板上获得它,您需要首先将会话存储在数据库集合上。为此,您可以使用connectmongo
包。从文档中:
const session = require('express-session');
const MongoStore = require('connect-mongo')(session);
app.use(session({
secret: 'foo',
store: new MongoStore(options)
}));
你必须使用-#{菜单}谢谢#Deep。你能描述一下如何使用#{menu}吗?是req.session.menubar数组还是一个字符串?这是json吗?如果您在question.array中共享req.session.menubar的值会更好,就像这样req.session.menubar=['/home','/contact']它在渲染视图时可以正常工作。但是假设我们调用ajax,如果您重新加载页面,那么就成功了。它不会反映在我们的视野中。