Чтение mongodb в шаблон HBS (руль)

Я пытаюсь отобразить данные из моего сервера mongodb в шаблон hbs, пытаясь портировать через этот учебник. Я не получаю никаких ошибок из журналов сервера или консоли в браузере, но я не получаю никаких данных, представленных в шаблоне. Интересно, что он генерирует HTML-разметку. Пожалуйста, помогите мне увидеть проблему.

* Примечание с использованием экспресс-фреймворка (и все еще обучения)

app.js:

app.post("/", function(req, res){
     res.render("default", {title:"posts", entries:myRoute.getBlogEntries()});
});

myRoute.js:

exports.getBlogEntries = function(res) {
mongo.connect("mongodb://localhost:27017/myDB", function(err, db){
       if(err) { return console.dir(err); }

       var collection = db.collection("posts");
       collection.find({},{},function(e,docs){
                   res.render("default", {
                       "entries" : docs
               });
         });
});
};

шаблон hbs:

{{#each entries}}
<form method="POST">
  <div class="well">
    <div class="row">
      <div class="col-md-1">
        <div>
          <button type="submit" value="{{_id}}" class="btn btn-lrg btn-primary" name="voteup" title="Vote post up"><span class="glyphicon glyphicon-thumbs-up"></span></button>
        </div>
        <div style="text-align:center;padding-right:5px;padding-top:7px;padding-bottom:7px;"><span class="badge">{{voteCount}}</span></div>
        <div>
          <button type="submit" value="{{_id}}" class="btn btn-lrg btn-danger" name="votedown" title="Vote post down"><span class="glyphicon glyphicon-thumbs-down"></span></button>
        </div>
      </div>
      <div class="col-md-10">
          <h4>{{title}}</h4>
          <label style="font-weight:normal;font-style:italic">Posted: {{published}}</label>
          <div>
            {{body}}
          </div>
      </div>
    </div>
  </div>
</form>
{{/each}}

Заранее спасибо!

1 ответ

Решение

Я предполагаю, что вы используете драйвер mongodb, который вы не указали.

collection.find возвращает курсор mongodb, а не массив документов. Вы можете использовать toArray, чтобы получить документы:

collection.find().toArray(function(e,docs){
   ...
}

Я предлагаю вам прочитать документацию библиотеки перед ее использованием, потому что вы просто можете догадаться, что делает API.

Другие вопросы по тегам