2015-07-01 51 views
1

我試圖解決訪問ejs forEach循環內的一些javascript對象的所有值的問題。ejs循環中無法訪問的某些對象值

使用以下.....

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

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

       <% }); %> 
      </ul> 

顯示的對象正確像這樣一個名單..

{ _id: 55907b9a84218bf511000001, __v: 0, bio: 'awesome bio', name: 'Joe Bloggs', email: '[email protected]'} 
{ _id: 5590818fba82f6e31a000001, bio: 'Another great bio', name: 'Rose', email: '[email protected]' } 

而且使用....

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

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

       <% }); %> 
      </ul> 

像預期的那樣僅顯示對象ID的像這樣......

55907b9a84218bf511000001 
5590818fba82f6e31a000001 

問題是,當我嘗試訪問使用「未定義」

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

結果即使我知道的值是正確的到達視圖的「名稱」或「電子郵件」值。我究竟做錯了什麼?提前致謝!

+0

您是否嘗試過'user._doc.name'和'user._doc.email'? – mscdex

+0

你如何將用戶數組傳遞給你的模板? –

+0

感謝@mscdex修復它。以前沒見過。如果你可能告訴我爲什麼需要_doc來訪問這些值,但不是user.id,我真的很感激它! – mikeym

回答

1

Mongoose Document實例實際上並不直接將數據存儲在文檔實例本身上,因爲它具有特殊的getter/setter來確保在其他Mongoose方法調用中使用該文檔時一切都一致。

獲取者/設置者將_doc對象用於實際值存儲,但您也可以撥打toObject()返回包含預期文檔值的普通js對象。

+0

感謝您的解釋。還有一件事令我困惑。我有另一個應用程序實例通過mongoose從mongodb中檢索數據,其方式與使用常規點符號'<%= user.name%>'顯示所有屬性完全相同。它在什麼情況下工作?它使用的應用程序唯一的真正區別是我使用快速路由器格式'router.route('/ users')。get(function(req,res)''而不是普通'app.get('/ users )'我也試着匹配兩個應用程序之間的所有依賴關係(其中一個有更近期的貓鼬),但問題依然存在。 – mikeym