【问题标题】:Inconsistent variable pass from express to jade从快递到玉的变量传递不一致
【发布时间】:2013-07-16 17:04:32
【问题描述】:

我正在使用 Node.js、Express、Jade 和 MongoDB。我遇到了一个关于渲染的奇怪问题。我传递了从 db 查询返回的变量“users”,如下所示,我很确定它是正确的:

userProvider.findByIds(ids, function(error, users) {
  res.render('index', { users: users }); // This users here has all documents founded by Ids.
});

并且在Jade模板文件index.jade中有一个循环:

- each user in users //-This users here has only one document after I added a new user

每次添加新用户后它都不起作用。它只显示一个用户,即最新添加的用户。但是如果我重新启动 Node.js,它会正常工作并显示每个用户都包含最新的用户。

我猜这些东西存在一些缓存问题。有什么想法吗?

【问题讨论】:

  • 您需要发布“用户”的内容,我们才能为您提供帮助。
  • 我只是以用户为例。我认为,它有什么样的内容并不重要。例如,在渲染之前,我检查了用户的长度是5。但是在jade中,用户的长度是1。这只有在我添加新文档后才会发生。
  • 嗯,这里没有足够的信息来提供答案。根据我的经验,您使用的工具在传递值时应该没有任何问题,无论是标量、数组还是对象。您如何向用户“添加文档”?通过蒙哥?你在哪里调用 res.render()?从您传递给 Mongo 的处理程序内部?
  • 刚刚更新了问题。希望现在更容易理解。这是我在这里问的第一个问题,:p.
  • 您的查询是否抛出了error?另外,您是如何添加新用户的?

标签: node.js mongodb express pug


【解决方案1】:

我将假设这与您的代码类似:

ul
  - each user in users
    li user.name    

问题在于行首的破折号 (-),其中包含 each。破折号会将该行的其余部分转换为unbuffered code,但each 不是代码。

渲染一个用户的原因可能与jade/pug 处理该行的方式有关,我敢打赌它将第一个用户放入内存但无法处理循环。

无论如何,这是循环遍历 users 数组的正确语法:

ul
  each user in users
    li user.name    

【讨论】:

    猜你喜欢
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多