使用 Express 和 Node 将值传回以由 Jade 呈现
Passing values back to be rendered by Jade, using Express and Node
我昨天问了一个问题,但我一直在继续。我没有调用 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 对象,我可以通过这种语法访问它的属性,但它不会工作。
我做错了什么?
OK - 事实证明 'locals' 不再有任何意义。保持我的代码不变,我需要访问 'locals.userId',但我可以只设置 'userId' 的值而根本没有 'locals' 对象。
您可能首先需要更好地理解 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
对象的错误方法。
我昨天问了一个问题,但我一直在继续。我没有调用 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 对象,我可以通过这种语法访问它的属性,但它不会工作。
我做错了什么?
OK - 事实证明 'locals' 不再有任何意义。保持我的代码不变,我需要访问 'locals.userId',但我可以只设置 'userId' 的值而根本没有 'locals' 对象。
您可能首先需要更好地理解 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
对象的错误方法。