如何在 ejs 模板中使用数组显示来自 mongo 的 json 数据?

Posted

技术标签:

【中文标题】如何在 ejs 模板中使用数组显示来自 mongo 的 json 数据?【英文标题】:How to display the json data from mongo with arrays in ejs template? 【发布时间】:2020-06-24 04:23:24 【问题描述】:

我正在使用猫鼬和快递等。我可以显示***值,例如“数字”,但无法获取“contact.email”。我在 server.js 文件中尝试了很多选项,但我希望有人可以帮助我从 ejs 端的 json 中提取这些信息。谢谢!

我在我的 ejs 模板中使用此代码:

`<% for(var i= 0 ; i < myObj.length; i++) %>
  <li>
    <span><%=myObj[i].number %>
  </li>
  <%  %>
   </ul>`

架构

    "_id" : ObjectId("5e67c84a65a2893029991863"),
    "number" : 5,
    "contact" : [ 
        
            "_id" : ObjectId("5e69a33a0208203268813e01"),
            "email" : "dhenley@gmail.com",

        
    ]
`



【问题讨论】:

【参考方案1】:

您可以在下面尝试此操作,因为您需要另一个循环来访问 json 中的联系人数组:

<% for(var i= 0 ; i < myObj.length; i++) %>
  <li>
    <span><%=myObj[i].number %>
  </li>
   <ul>
   for(var j=0 ; j < myObj[i].contact.length; j++)
   <li>
    <span><%=myObj[i].contact[j].email %>
  </li>
   <%  %>
  </ul>
  <%  %>
   </ul>`

【讨论】:

这是我认为我可能需要的很长的行,但现在我遇到了一个错误。它正在等待我的 server.js 文件上的捕获或异步或捕获。听起来对吗? 你可以使用 catch 我追踪到 ejs 代码的 catch 错误,仍在努力修复它。 在您的示例中,第二个 for 循环中缺少左大括号,遗憾的是我花了很长时间才注意到这一点。我会帮你编辑的,谢谢!【参考方案2】:

假设您的对象格式如下:-

 var myObj= 
   "_id" : ObjectId("5e67c84a65a2893029991863"),
   "number" : 5,
   "contact" : [
     "_id": ObjectId("5e69a33a0208203268813e01"),
       "email": "dhenley@gmail.com"
   ]
 ;

你必须像下面这样循环你的数据:-

<span><%=myObj.number %></span>
<ul>
  <% for(var i= 0 ; i < myObj.contact.length; i++) %>
  <li><%=myObj.contact[i].email %></li>
  <%  %>
</ul>`

注意:- 因为myObj 是一个对象。 myObj.contactarraymyObj。所以在这种情况下你必须循环你的myObj.contact

【讨论】:

我以前试过这种方式,它不喜欢 myObj.contact.length 它说长度未定义。从我读到的你不能在这里做点符号。 @BrandoThom 请添加您的 JSON 格式。所以我可以更好地帮助你。

以上是关于如何在 ejs 模板中使用数组显示来自 mongo 的 json 数据?的主要内容,如果未能解决你的问题,请参考以下文章

nodejs使用ejs模板渲染的数组问题

如何将数组从 js 打印到 ejs 模板?

如何使用 Nodejs/mongodb/mongoose 在 ejs/html 中显示数据库项目?

在 Express/EJS 模板中,循环数组的最简洁方法是啥?

在 AJAX 调用(使用 ExpressJS)之后,在 EJS 模板中循环遍历数组的正确方法是啥?

如何使用 EJS 模板有条件地显示 HTML?