我有一个登录表单,询问用户,用户名,密码和公司名称。 公司名称是数据库名称,因此在登录后请求中我必须在会话中设置数据库名称。
我认为更好的选择是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
。
答案 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;
您也可以在登录路线中以相同的方式执行此操作。