【问题标题】:EJS Conditional import not showing htmlEJS条件导入不显示html
【发布时间】:2019-06-10 23:28:06
【问题描述】:

我试图仅在定义变量用户时,登录后显示 html,但无论我做什么,包含都不起作用

登录后,用户被重定向到'/'并填充了对象用户

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('/');

【问题讨论】:

    标签: node.js express ejs


    【解决方案1】:

    当你打电话时

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

    【讨论】:

    • 只有当我在顶部声明变量时才有效,可能是因为我将它发送到其他部分吗?
    • @tramada 很抱歉,我对 EJS 了解不多。您可以尝试专门针对该问题提出另一个问题,或者,如果您有正确运行的内容,请使用有效的内容。
    猜你喜欢
    • 2018-02-07
    • 1970-01-01
    • 2019-09-26
    • 2014-10-12
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    • 2016-05-15
    相关资源
    最近更新 更多