命令行玉“无法读取属性”

时间:2014-05-25 15:23:09

标签: node.js pug

使用Passport运行this useful walkthrough进行Node.js身份验证,但使用Jade模板而不是ejs。当实际运行应用程序时,HTML中会显示正确的值,但令我感到恼火的是命令行jade抱怨。有什么想法吗?

这是调用代码:

exports.myAccount = function (req, res) {
    res.render('myAccount', {
        title: 'Welcome back.',
        user: req.user
    })
};

...和Jade文件的片段(myAccount.jade):

div.row
    div.col-sm-6
        div.well
            h3
                span(class="fa fa-user")
                | Local
            p
                strong id
                | : #{user._id}
                br
                strong Username
                | : #{user.local.username}

最后,运行Jade时的错误是:

TypeError: myAccount.jade:22
    20|                         p
    21|                             strong id
  > 22|                             | : #{user._id}
    23|                             br
    24|                             strong Username
    25|                             | : #{user.local.username}

Cannot read property '_id' of undefined
    at eval (eval at <anonymous> (..../lib/jade.js:172:8), <anonymous>:138:49)

如前所述,值实际呈现,那么如何让Jade退出抱怨?

ADV-THANKS-ANCE

1 个答案:

答案 0 :(得分:1)

简短回答:在命令行上提供一些数据,以便jade可以正确呈现字符串插值表达式,例如#{user._id}

jade --obj '{"user": {"_id": "42", "local": {"username": "bob"}}}' myAccount.jade

说明:Jade需要输入2个东西:一些jade语法加上一些数据。在您的应用中,数据由您的代码提供req.user等,因此jade具有将模板呈现为HTML所需的内容。在命令行上,那里没有数据,所以你必须像我上面那样提供它。

奖金提示:如果没有这么多管道,可以使用更简洁的方式表达模板:

div.row
  div.col-sm-6
    div.well
      h3
        span.fa.fa-user Local
      p
        strong= "id: #{user._id}"
        br
        strong= "Username: #{user.local.username}"