使用Express和Node将值传回Jade呈现

时间:2015-03-30 09:52:25

标签: javascript node.js express pug

我昨天问过一个问题,但我一直坚持下去。我没有调用next()并传递一个Error对象,而是研究了它正在做什么,并尝试复制它。现在,当有人登录但失败时,我这样做:

   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对象,我可以通过这种语法访问它的属性,但它不起作用。

我做错了什么?

2 个答案:

答案 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'并没有当地人'完全是对象。