Express js - 如何在会话中设置变量?

时间:2018-02-22 10:52:39

标签: javascript express express-session

我有一个登录表单,询问用户,用户名,密码和公司名称。 公司名称是数据库名称,因此在登录后请求中我必须在会话中设置数据库名称。

我认为更好的选择是session,对吧?而不是req.locals

例如,我尝试使用req.locals设置但不起作用:

app.js

// Global Vars
app.use(function (req, res, next) {
  res.locals.success_msg = req.flash('success_msg');
  res.locals.error_msg = req.flash('error_msg');
  res.locals.error = req.flash('error');
  res.locals.user = req.user || null;
  res.locals.database = req.database || null;
  next();
});
// Express Session
app.use(session({
    secret: 'secret',
    saveUninitialized: true,
    resave: true
}));

/login路线后,我尝试设置如下:

req.locals.database = 'db_xpto';

在视图中我尝试显示变量,但不显示任何内容:

h4 Using database: #{database}

哪个更好的解决方案,本地变量或会话?我该怎么设置呢?

注意:登录时我使用的是passport

1 个答案:

答案 0 :(得分:0)

IMO,使用会话是一种更好的方法,因为它由会话中间件自动处理。此外,res.locals不适用于该会话,但仅适用于该请求。您可以修改代码以直接在路由中使用会话,而不是使用明确定义的中间件。

  res.session.success_msg = req.flash('success_msg');
  res.session.error_msg = req.flash('error_msg');
  res.session.error = req.flash('error');
  res.session.user = req.user || null;
  res.session.database = req.database || null;

您也可以在登录路线中以相同的方式执行此操作。