【问题标题】:Variables not showing content on Jade template变量未在 Jade 模板上显示内容
【发布时间】:2013-12-03 01:10:46
【问题描述】:

我正在使用一本书来学习 Node.js。有一个示例,作为学习经验,我将其转换为 SQL 版本。

此单页仅用于显示用户信息。我在中间件上加载用户信息,然后将其传递给 Jade 模板。到目前为止一切正常。

当我想渲染下面的模板时,无论我从用户对象中使用什么内容,它都不会渲染任何内容。

h1= user.Name
h2 Bio
p= user.Bio
form(action="/users/" + encodeURIComponent(user.User), method="POST")
  input(name="_method", type="hidden", value="DELETE")
  input(type="submit", value="Delete")

为了检查对象是否没有内容,我在前面添加了这两行

-console.log ( 'Inside Jade' )
-console.log ( user )

控制台中的结果是:

Inside Jade
[ { Name: 'Jennifer Lopes',
    User: 'jenny',
    Password: 'asd',
    Bio: 'Actress and singer' } ]

所以这告诉我信息在那里,但没有被呈现。

用于渲染模板的代码是:

app.get ('/users/:name', loadUser, function ( req, res, next ) {
res.render ( 'users/profile', { title: 'User profile', user: req.user });
});

你能帮我理解我做错了什么吗?提前致谢。

【问题讨论】:

  • 你能发布你用来渲染模板的代码吗?
  • 当然,已添加到问题中

标签: node.js pug


【解决方案1】:

如果不查看所有代码,有点难以分辨,但根据控制台的输出,如果您将翡翠模板更改为输出类似 user[0] 的内容,则用户实际上是一个基于括号的对象数组.Name 是否提供了您的预期值?

【讨论】:

  • User 是 node-mysql connection.query 的结果。我得到了用户名,我在 MySql 数据库上对具有该名称的用户进行查询,并在找到该用户时显示结果(尚未编写未找到该用户的逻辑)。如果我按您提到的那样添加 [0],它会按预期显示模板。虽然我可以忍受,但正确的编写方法是什么,所以我不需要索引,就好像它是一个数组一样?
  • 我对 node-mysql 不是最熟悉,但是查看文档,它似乎总是返回一个数组,或者换一种方式,它没有内置的帮助方法来返回一个预计仅返回一条记录时的单个项目。话虽如此,我会将您的控制器行更改为 user: req.user[0] 这样您的 Jade 逻辑就不必担心数组。无论您的 mysql 查询发生在哪里,您也可以在上游进一步做同样的事情。
  • 您也可以在翡翠模板的开头创建一个包含传入数据中的 [0] 项的翡翠变量,并使用该变量代替传入的数组。它会工作,但我会接受我之前在控制器中处理它的建议。我希望这会有所帮助并且有意义。
  • 谢谢你,克里斯。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-08
  • 2012-02-20
  • 2014-05-10
  • 2015-02-05
  • 2017-06-11
  • 2020-08-21
相关资源
最近更新 更多