如何将填充的Mongoose对象传递给渲染代码?

MW *_*ost 5 mongoose node.js express

在我的routes.js文件的以下代码中,我可以成功填充一个名为的Mongoose对象中的一些引用Map.当我查看页面时,控制台会打印完全填充popmapeditor对象版本.

  app.get('/map/:id', function(req, res){
    Map
    .findOne({ _id: req.map._id })
    .populate('_editors')
    .run(function (err, popmap) {
      console.log('The editors are %s', popmap._editors);
    });
    res.render('maps/show', {
      title: req.map.title,
      map: req.map
    });
  });
Run Code Online (Sandbox Code Playgroud)

但是,我还没想到如何执行填充步骤,使得结果对象仍然在渲染代码的范围内.换句话说,如何将填充的对象传递给Jade模板而不是仅仅发送req.map

ale*_*lex 6

问题是你正在编写Mongoose代码,好像它是同步的,但你需要在运行回调函数中调用res.render,因为那是在查询执行时.在您的示例中,将在查询返回结果之前调用render函数.

除此之外,您可以将popmap变量作为局部变量传递给视图:

app.get('/map/:id', function(req, res){
  Map
  .findOne({ _id: req.map._id })
  .populate('_editors')
  .run(function (err, popmap) {
    console.log('The editors are %s', popmap._editors);
    res.render('maps/show', {
      title: req.map.title,
      map: req.map,
      popmap: popmap // you can access popmap in the view now
    });
  });
});
Run Code Online (Sandbox Code Playgroud)