【问题标题】:Certain object values not accessible in ejs loop在 ejs 循环中无法访问某些对象值
【发布时间】:2015-07-01 03:19:01
【问题描述】:

我正在尝试解决一个问题,即使用 ejs 在 forEach 循环中访问某些 javascript 对象的所有值。

使用以下.....

            <ul>
                <% users.forEach(function(user) { %>

                          <li><%= user %></li>

                <% }); %>
            </ul>

像这样将对象正确显示为列表..

{ _id: 55907b9a84218bf511000001, __v: 0, bio: 'awesome bio', name: 'Joe Bloggs', email: 'joe@mail.com'}
{ _id: 5590818fba82f6e31a000001, bio: 'Another great bio', name: 'Rose', email: 'rosey@mail.com' }

并使用....

            <ul>
                <% users.forEach(function(user) { %>

                          <li><%= user.id %></li>

                <% }); %>
            </ul>

按预期只显示对象 id ......

55907b9a84218bf511000001
5590818fba82f6e31a000001

问题是当我尝试使用访问“名称”或“电子邮件”值时

<li><%= user.name %></li>
<li><%= user.email %></li>

即使我知道值正确到达视图,也会导致“未定义”。我究竟做错了什么?提前致谢!

【问题讨论】:

  • 你试过user._doc.nameuser._doc.email吗?
  • 您如何将用户数组传递给您的模板?
  • 感谢@mscdex 修复它。没见过以前用过的。如果你能告诉我为什么需要 _doc 来访问这些值而不是 user.id 我真的很感激!
  • @BidhanA 感谢您的回复。其他有类似问题的人都很清楚,我只是传递了请求回调函数中返回的用户数据,就像res.render('index.ejs', { users : users } );

标签: javascript node.js express ejs


【解决方案1】:

Mongoose Document 实例实际上并不将数据直接存储在文档实例本身上,因为它有特殊的 getter/setter 来确保在其他 Mongoose 方法调用中使用文档时一切都是一致的。

getter/setter 使用_doc 对象来存储实际值,但您也可以调用toObject() 来返回一个包含预期文档值的普通 js 对象。

【讨论】:

  • 感谢您的解释。还有一件事让我感到困惑。我有另一个应用程序实例通过 mongoose 从 mongodb 检索数据,其方式与使用常规点符号 &lt;%= user.name %&gt; 显示所有属性的方式完全相同。它在什么情况下起作用?它工作的应用程序中唯一真正的区别是我使用的是快速路由器格式router.route('/users').get(function(req,res),而不是常规的app.get('/users)。我还尝试匹配两个应用程序之间的所有依赖项(一个具有更新的猫鼬),但问题仍然存在。
猜你喜欢
  • 2021-12-05
  • 2012-05-25
  • 1970-01-01
  • 2015-01-27
  • 1970-01-01
  • 1970-01-01
  • 2018-03-06
  • 2017-12-29
  • 2021-12-31
相关资源
最近更新 更多