我正在尝试输出位于json对象中的数组的特定索引。
例如,我从MongoDB中获取了以下json对象
{ _id: 55b65199c92d15d80fd94803,
site: 'test.com',
company: 'test',
__v: 0,
votes: [
{ vote_user: '55a11de3e4c770982730ccb9' },
{ vote_user: '55a11de3e4c770982730612a' }
]
}
此对象从nodejs route render传递为名为suggestion的对象,并通过EJS循环使用
<% suggestion.forEach(function(item){ %><%}%>
在这个阶段,我尝试使用
从投票数组中检索特定的vote_user对象 <% suggestion.forEach(function(item){ %><%- item.votes[0] %><%})%>
但是,我得到的只是 undefined
我尝试将'item'分配给一个javascript变量,然后将其记录到浏览器控制台,它完全符合我的要求并期望它 - 就像我得到以下结果一样:
Object {vote_user: "55a11de3e4c770982730ccb9"}
真的无法解决为什么它不起作用,因为我认为。
由于有点不清楚设置如何,这里是使用的实际代码:
<% suggestion.forEach(function(item, i){ %>
<div class="suggestion-entry suggestion-<%- item._id %>" data-entry="<%- item._id %>">
<!--<%- item %>-->
<div class="entry-info">
<div class="voting">
<script>
console.log(<%- item.votes %>[0].vote_user)
</script>
<%- item.votes[0].vote_user %>
<div class="vote vote-up"><a><i class="fa fa-chevron-up"></i></a></div>
<div class="vote vote-down"><a><i class="fa fa-chevron-down"></i></a></div>
</div>
<div class="image"><img src='http://placehold.it/130x90.jpg'></div>
<div class="company">
<h2><a href="<%= item.site %>"><%= item.company %></a></h2>
<span class="desc"><%= item.company %></span>
</div>
</div>
</div>
<% }); %>
脚本标记输出实际的vote_user值而不是undefined。
app.get('/', function(req, res) {
Suggestion.find(function(err, suggestions){
res.render('index', { message: req.flash('message'), title: "title", user : req.user, suggestion : suggestions });
})
});
MongoDB文档在开头写的
答案 0 :(得分:0)
回答问题的答案:
首先,您的id
需要是一个字符串。似乎问题在于使用<%-
标签。也许你可以找到关于它应该如何工作但在网站上进行测试的文档,在<%=
完美运行时根本不起作用。剥夺了概念证明:
<%
var suggestion = [{ _id: '55b65199c92d15d80fd94803',
site: 'test.com',
company: 'test',
__v: 0,
votes: [
{ vote_user: '55a11de3e4c770982730ccb9' },
{ vote_user: '55a11de3e4c770982730612a' }
]
}];
%>
<% suggestion.forEach(function(item, i){ %>
<div class="suggestion-entry suggestion-<%= item._id %>" data-entry="<%= item._id %>">
<li><%= item.votes[0].vote_user %></li>
<li><%= item.site %></li>
<li><%= item.company %></li>
</div>
<% }); %>
将其粘贴到网站上的测试文本区域中,您将看到它的工作原理。如果这仍然无法使用您的代码,那么会发生一些完全不同的事情。
答案 1 :(得分:0)
所以,我终于设法解决了这个问题 - 我不确定为什么这个解决方案有效,但它确实有效。
根据@Jan的建议,id
必须转换为字符串,以使EJS能够正确验证和使用json对象。
解决方案是首先对从节点
传递的json对象进行字符串化app.get('/', function(req, res) {
Suggestion.find(function(err, suggestions){
res.render('index', { message: req.flash('message'), title: "title", user : req.user, suggestion : JSON.stringify(suggestions) });
})
});
这会将所有对象和数组作为字符串返回,而不是为mongo中的值设置的数据类型。
为了能够使用字符串值,我在EJS中只是将字符串化的建议变量解析为JSON with
JSON.parse(suggestion)