循环遍历具有子数组的嵌入式文档并将它们显示在 EJS 文档上
Looping through an embedded document that has sub arrays and display them on EJS document
我的目标是尝试遍历嵌入式文档以显示相同 ID posts 的评论。
这是我在 node.js 服务器中的模式结构:
var postSchema = new mongoose.Schema({
name: String,
post: String,
comment: [
{
commentname: String,
comment: String
}
]
});
以下是我如何接收将评论添加到具有当前 ID 的 post:
app.post('/comment/:id', function(req, res) {
console.log(req.body);
var comments = {
commentname: req.body.name,
comment: req.body.comment
}
Posts.update({_id: req.params.id}, {$push: {comment: comments}}, {safe: true, upsert: true}, function(err, comments){
if (err) {
console.log("Issue with adding a comment");
res.redirect('/');
} else {
console.log("Success Adding Comments");
res.redirect('/');
}
});
});
这就是我在主页上显示所有 post 和评论的方式:
app.get('/', function(req, res) {
Posts.find({}, function(err, posts) {
if (err) {
console.log('Issue receiving posts');
} else {
console.log('Receiving Posts Success');
res.render("index", {posts: posts});
}
});
});
这是我的 EJS 文件的样子:
<% for (index in posts) { %>
<div class="posts">
<h3>Name: <%= posts[index].name %></h3>
<h3>Message: <%= posts[index].post %></h3>
<div class="comment">
<h3 class="text-underline"><i>Post a Comment: </i></h3>
<div class="comments">
<p>Name: Jimmy</p>
<p>Comment: I agree, the codingdojo is pretty swell</p>
</div>
<div class="comments">
<p>Name: Bob</p>
<p>Comment: Why aren't you guys working?</p>
</div>
<form action="/comment/<%= posts[index]._id %>" method="post">
<label for="name" style="display: block">Name: </label>
<input type="text" name="name" id="name">
<br />
<label for="comment">Message: </label>
<textarea name="comment" id="comment" class="form-control"></textarea>
<button class="btn btn-info pull-right">Post Comment</button>
</form>
</div>
</div>
<% } %>
我无法弄清楚如何在 post 中添加嵌套循环并显示属于 post 的特定评论。
但是我可以通过以下方式访问属于 post 的名称和评论:
<%= console.log(posts[0].comment[0].commentname) %>
<%= console.log(posts[0].comment[0].comment) %>
我对如何在 post 中添加嵌套循环以仅显示属于特定 post 的评论和名称感到非常困惑。我目前有一个虚拟文本,用于说明评论应该去哪里,也作为一个例子。
* 更新 *
这是我目前的情况:
<% for (index in posts) { %>
<div class="posts">
<h3>Name: <%= posts[index].name %></h3>
<h3>Message: <%= posts[index].post %></h3>
<div class="comment">
<h3 class="text-underline"><i>Post a Comment: </i></h3>
<% if (posts[index].comment != 'undefined') { %>
<% for (commentindex in posts[index].comment) { %>
<div class="comments">
<p>Name: <%= posts[index].comment[commentindex].commentname %></p>
<p>Comment: <%= posts[index].comment[commentindex].comment %></p>
</div>
<% } %>
<% } %>
这是在正确的 post 处打印出注释,这正是我想要的,但是现在它会无缘无故地打印出很多未定义的内容。例如,这是页面上的内容:
姓名:维多利亚
消息:午餐什么时候到?
Post一条评论:
姓名:戴安娜
评论:嗨,最近怎么样!?
姓名:罗比
评论:闭嘴!
姓名:弗兰基
评论:嘿,我需要和你谈谈!
姓名:未定义
评论:未定义
姓名:未定义
评论:未定义
姓名:未定义
评论:未定义
姓名:未定义
评论:未定义
姓名:未定义
评论:未定义
姓名:未定义
评论:未定义
姓名:未定义
评论:未定义
姓名:未定义
<% for (index in posts) { %>
<div class="posts">
<h3>Name: <%= posts[index].name %></h3>
<h3>Message: <%= posts[index].post %></h3>
<div class="comment">
<h3 class="text-underline"><i>Post a Comment: </i></h3>
<% for (commentindex in posts[index].comment) { %>
<div class="comments">
<p>Name: <%= posts[index].comment[commentindex].commentname %></p>
<p>Comment: <%= posts[index].comment[commentindex].comment %></p>
</div>
<% } %>
<form action="/comment/<%= posts[index]._id %>" method="post">
<label for="name" style="display: block">Name: </label>
<input type="text" name="name" id="name">
<br />
<label for="comment">Message: </label>
<textarea name="comment" id="comment" class="form-control"></textarea>
<button class="btn btn-info pull-right">Post Comment</button>
</form>
</div>
</div>
<% } %>
在这里您可以访问属于 post 的名称和评论,因为循环在 posts 循环内。
我的目标是尝试遍历嵌入式文档以显示相同 ID posts 的评论。
这是我在 node.js 服务器中的模式结构:
var postSchema = new mongoose.Schema({
name: String,
post: String,
comment: [
{
commentname: String,
comment: String
}
]
});
以下是我如何接收将评论添加到具有当前 ID 的 post:
app.post('/comment/:id', function(req, res) {
console.log(req.body);
var comments = {
commentname: req.body.name,
comment: req.body.comment
}
Posts.update({_id: req.params.id}, {$push: {comment: comments}}, {safe: true, upsert: true}, function(err, comments){
if (err) {
console.log("Issue with adding a comment");
res.redirect('/');
} else {
console.log("Success Adding Comments");
res.redirect('/');
}
});
});
这就是我在主页上显示所有 post 和评论的方式:
app.get('/', function(req, res) {
Posts.find({}, function(err, posts) {
if (err) {
console.log('Issue receiving posts');
} else {
console.log('Receiving Posts Success');
res.render("index", {posts: posts});
}
});
});
这是我的 EJS 文件的样子:
<% for (index in posts) { %>
<div class="posts">
<h3>Name: <%= posts[index].name %></h3>
<h3>Message: <%= posts[index].post %></h3>
<div class="comment">
<h3 class="text-underline"><i>Post a Comment: </i></h3>
<div class="comments">
<p>Name: Jimmy</p>
<p>Comment: I agree, the codingdojo is pretty swell</p>
</div>
<div class="comments">
<p>Name: Bob</p>
<p>Comment: Why aren't you guys working?</p>
</div>
<form action="/comment/<%= posts[index]._id %>" method="post">
<label for="name" style="display: block">Name: </label>
<input type="text" name="name" id="name">
<br />
<label for="comment">Message: </label>
<textarea name="comment" id="comment" class="form-control"></textarea>
<button class="btn btn-info pull-right">Post Comment</button>
</form>
</div>
</div>
<% } %>
我无法弄清楚如何在 post 中添加嵌套循环并显示属于 post 的特定评论。
但是我可以通过以下方式访问属于 post 的名称和评论:
<%= console.log(posts[0].comment[0].commentname) %>
<%= console.log(posts[0].comment[0].comment) %>
我对如何在 post 中添加嵌套循环以仅显示属于特定 post 的评论和名称感到非常困惑。我目前有一个虚拟文本,用于说明评论应该去哪里,也作为一个例子。
* 更新 *
这是我目前的情况:
<% for (index in posts) { %>
<div class="posts">
<h3>Name: <%= posts[index].name %></h3>
<h3>Message: <%= posts[index].post %></h3>
<div class="comment">
<h3 class="text-underline"><i>Post a Comment: </i></h3>
<% if (posts[index].comment != 'undefined') { %>
<% for (commentindex in posts[index].comment) { %>
<div class="comments">
<p>Name: <%= posts[index].comment[commentindex].commentname %></p>
<p>Comment: <%= posts[index].comment[commentindex].comment %></p>
</div>
<% } %>
<% } %>
这是在正确的 post 处打印出注释,这正是我想要的,但是现在它会无缘无故地打印出很多未定义的内容。例如,这是页面上的内容:
姓名:维多利亚 消息:午餐什么时候到?
Post一条评论:
姓名:戴安娜
评论:嗨,最近怎么样!?
姓名:罗比
评论:闭嘴!
姓名:弗兰基
评论:嘿,我需要和你谈谈!
姓名:未定义
评论:未定义
姓名:未定义
评论:未定义
姓名:未定义
评论:未定义
姓名:未定义
评论:未定义
姓名:未定义
评论:未定义
姓名:未定义
评论:未定义
姓名:未定义
评论:未定义
姓名:未定义
<% for (index in posts) { %>
<div class="posts">
<h3>Name: <%= posts[index].name %></h3>
<h3>Message: <%= posts[index].post %></h3>
<div class="comment">
<h3 class="text-underline"><i>Post a Comment: </i></h3>
<% for (commentindex in posts[index].comment) { %>
<div class="comments">
<p>Name: <%= posts[index].comment[commentindex].commentname %></p>
<p>Comment: <%= posts[index].comment[commentindex].comment %></p>
</div>
<% } %>
<form action="/comment/<%= posts[index]._id %>" method="post">
<label for="name" style="display: block">Name: </label>
<input type="text" name="name" id="name">
<br />
<label for="comment">Message: </label>
<textarea name="comment" id="comment" class="form-control"></textarea>
<button class="btn btn-info pull-right">Post Comment</button>
</form>
</div>
</div>
<% } %>
在这里您可以访问属于 post 的名称和评论,因为循环在 posts 循环内。