2015-07-01 1 views
1

Я пытаюсь решить проблему с доступом ко всем значениям некоторых объектов javascript внутри цикла forEach с ejs.Определенные значения объектов, недоступные в цикле 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> 

Отображает только идентификаторы объектов, как ожидалось, так ....

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 фактически не хранят данные непосредственно на самом экземпляре документа, поскольку у него есть специальные геттеры/сеттеры, чтобы убедиться, что все согласовано, если документ используется в других вызовах метода Mongoose.

Агрегаты/сеттеры используют объект _doc для хранения фактического значения, но вы также можете вызвать toObject(), чтобы вернуть простой объект js, содержащий ожидаемые значения документа.

+0

Спасибо за объяснение , Еще одна вещь меня озадачивает. У меня есть другой экземпляр приложения, который извлекает данные из mongodb через mongoose точно таким же образом, который отображает все свойства, используя стандартную точечную нотацию '<% = user.name%>'. При каких обстоятельствах это работает? Единственная реальная разница в приложении, в котором он работает, я использую формат express router 'router.route ('/ users'). Get (function (req, res)' в отличие от обычного 'app.get ('/ users) '. Я также попытался сопоставить все зависимости между этими двумя приложениями (один из них имеет более поздний мангуст), но проблема не устранена. – mikeym