我试图仅在定义变量user后登录后才显示html,但是无论我在哪里,include都不起作用
登录后,将用户填充到对象用户中,将用户重定向到'/'
Console.log在第二次调用“ /”路由时打印用户
除了下面的语法外,我还尝试了其他语法:
if (user)...
if (typeof user !== "undefined")...
index.ejs:
<% var user; %>
<%- include('partials/head'); %>
<body>
<%- include('partials/navbar'); %>
<% if (user.length > 0) { %>
<%- include('home'); %>
<% }; %>
<%- include('partials/scripts'); %>
</body>
<%- include('partials/footer'); %>
路线:
router.get('/', function (req, res, next) {
let user = req.cookies['user'];
if(user){
console.log(user);
}
res.render('index', user);
});
module.exports = router;
部分登录方法(有效,正在将填充的对象发送到路由):
if (result == true) {
let token = jwt.sign({ user: newUser }, 'secretkey', { expiresIn: '60s' });
currentUser.jwt = token;
currentUser.logado = true;
res.cookie('user', currentUser);
res.redirect('/');
答案 0 :(得分:2)
致电时
res.render('index', user);
您说的是“将user
中的值的属性用作EJS模板中的变量。”如果您的user
值看起来像{ name: "foobar", isAdmin: false }
,那么您实际上就可以这样做
res.render('index', { name: "foobar", isAdmin: false });
请注意,这不会创建名为user
的模板变量,因为传递给render
的对象没有user
属性。相反,您可能想传递一个包含名为user
的属性的对象,该属性的值为您的user
值:
res.render('index', { user: user });
或更短或更短:
res.render('index', { user });
此外,我不确定var user;
是否会掩盖您的render
提供的user
值。我建议您从EJS模板中删除该语句。