如何在expressjs中显示多个mongoose搜索结果

时间:2013-05-16 06:06:09

标签: node.js model-view-controller express mongoose

我正在创建一个基于expressjs的MVC,以便学习快递。我在模型和视图之间遇到了麻烦。 Git仓库存在here

我想显示博客帖子列表。我正在使用自定义的jasmine视图,与mongoose和expressjs一起使用。我不知道如何从查询中返回帖子列表(find({})并将该对象转移到视图中,或者在我拥有它们时使用jasmine中的那些帖子。

我在视图中访问此信息的最佳方法是通过res.locals,但似乎无效。

// read
app.get('/', function(req, res){
  Blog.find({},function(err, records){
    res.locals.posts = records
    // res.send(records);
    records.forEach(function(record){
      console.log(record["body"])
    });
  });

  res.render("home.jade", {online:req.online.length + ' users online', posts:VARIABLE_I_AM_UNCLEAR_ABOUT});
});

我可以在我的console.log中看到正文,所以很明显我有json博客帖子。此外,我可以使用res.send(记录)返回JSON。我想访问这些记录,所以我可以用茉莉花在我的视图中设置那些样式。

1 个答案:

答案 0 :(得分:2)

只需将render移至您尝试send的位置即可:

app.get('/', function(req, res){
  Blog.find({},function(err, records){
    res.render("home.jade", {
      online : req.online.length + ' users online',
      posts  : records
    });
  });
});

Blog.find()是异步的,因此只有在从数据库发回结果时才会调用回调函数。在您的原始情况下,您在没有先等待结果的情况下渲染模板。