使用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
答案 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}"