如何使用 Node.js 后端访问 EJS 模板中的会话数据?

Kau*_*ana 2 ejs node.js express node-modules

我根据用户的角色创建了一个动态菜单栏。在服务器端,当用户登录时,我将他们所有允许的页面存储在他们的会话中。

现在,我有 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})
}    
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我需要在每个页面上传递会话数据。如果我有 50 个 html 模板,那么在每个路由中传递会话的效率并不高。

处理这个问题的最佳方法是什么?

rot*_*ial 5

  1. 您是否包含了此答案中所示的 HTML 文件?

  2. 假设您使用的是express-session,您可能还需要设置中间件来将会话信息分配给响应( ) ,如本答案res所示。

应用程序.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();
});
Run Code Online (Sandbox Code Playgroud)

然后尝试引用res.locals.user而不是请求对象。