2015-09-14 32 views
1

我的目標是我試圖通過嵌入文檔循環顯示相同ID文章的註釋。循環訪問具有子陣列並在EJS文檔上顯示它們的嵌入文檔

這裏是Node.js的服務器我的架構結構:

var postSchema = new mongoose.Schema({ 
    name: String, 
    post: String, 
    comment: [ 
     { 
     commentname: String, 
     comment: String 
     } 
    ] 
}); 

這裏是我收到添加評論當前擁有ID的帖子:

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('/'); 
     } 
    }); 
}); 

這是怎麼了我顯示了所有的帖子和評論的主網頁:

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> 
    <% } %> 

我很難搞清楚如何在帖子中添加嵌套循環並顯示屬於該帖子的特定註釋。

但是我能夠訪問屬於後用下面的名稱和註釋:

<%= console.log(posts[0].comment[0].commentname) %> 
<%= console.log(posts[0].comment[0].comment) %> 

我對我怎樣才能在帖子內添加一個嵌套循環很迷茫只顯示屬於該特定帖子的評論和名稱。我目前有虛擬文本,以供評論的地方也作爲例子。

* UPDATE *

這是我到目前爲止有:

<% 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> 
     <% } %> 
     <% } %> 

這是打印出在正確的崗位,這是我想要的意見,但現在它是印刷很多未定義出來的地方都沒有。例如,這是頁面上的內容:

產品名稱:維多利亞 消息:什麼時候午餐到達?

發表評論:

名稱:戴安娜

評論:嘿,最近怎麼樣!?

名稱:Robby

評論:閉嘴!

產品名稱:Frankie

評論:嘿,我需要和你談談!

名稱:未定義

評論:不確定

名稱:未定義

評論:不確定

名稱:未定義

評論:不確定

名稱:未定義

評論:不確定

名稱:未定義

評論:不確定

名稱:未定義

評論:不確定

名稱:未定義

評論:不確定

名稱:未定義

回答

2
<% 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> 
<% } %> 

在這裏你可以訪問名稱和所屬的職位,因爲循環是循環的帖子裏面的評論。

+0

不過現在,它正在打印評論被認爲是正確的地方,但現在它打印出大量未定義的內容。 –

+0

它們是數據庫中的數據,因此您需要在添加註釋前進行一些驗證(檢查它們是否爲空) – Rox

+0

我沒有向我的數據庫添加任何日期,只是名稱和註釋。 –

相關問題