EJS条件导入不显示html

时间:2019-06-10 15:01:51

标签: node.js express ejs

我试图仅在定义变量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('/');

1 个答案:

答案 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模板中删除该语句。