res.render("pages/home",
{
flash:{"danger":["Login failed. Please enter your details and try again."]},
body:{},
section:"home",
locals : { userId : req.body.email }
}
这与旧代码完全相同。我逐步完成它,我可以看到locals对象包含一个名为userId的属性,具有我期望的值。在Jade模板中,我有这个:
p it's #{typeof(userId)}
if(typeof(userId) != 'undefined')
p Welcome #{userId}
input(type='text', name='email', id="inputEmail", placeholder="Email", value="#{userId}")
else
input(type='text', name='email', id="inputEmail", placeholder="Email", value="")
这总是呈现为'未定义',然后是一个空文本框。我已经阅读了几个这方面的问题,据我所知,他们都说同样的事情:如果我将locals设置为JSON对象,我可以通过这种语法访问它的属性,但它不起作用。
我做错了什么?
答案 0 :(得分:2)
您可能首先需要更好地了解locals
对象的实际工作方式。
在服务器端,执行此操作:
res.render('view', { property: 'value' } );
会在您的观看中提供property
,如下所示:
div Value = #{property}
您还可以执行以下操作以获得相同的效果:
res.locals.property = 'value';
res.render('views');
请注意locals
对象的用法。 More info
回到你的问题,因为你有
res.render("pages/home", { locals: { userId : req.body.email } })
在这种情况下访问userId
你会这样做:
p Welcome #{locals.userId}
所以我猜你是混淆了以错误方式使用locals
对象的两种方法。
答案 1 :(得分:1)
好的 - 证明了当地人'不再意味着任何事情。保留我的代码,我需要访问' locals.userId',但我可以设置' userId'并没有当地人'完全是对象。