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

标签 node.js express mongoose

在我的 routes.js 文件中的以下代码中,我可以成功地在名为 Map 的 Mongoose 对象中填充一些引用。当我查看页面时,控制台会打印出完全填充的 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
    });
  });

不过,我还没有想出如何执行填充步骤,以便生成的对象保留在呈现代码的范围内。换句话说,我如何才能将填充的对象传递给 Jade 模板而不是仅仅发送 req.map

最佳答案

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

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

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
    });
  });
});

关于node.js - 如何将填充的 Mongoose 对象传递给渲染代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8722697/

相关文章:

mysql - 在哪里放置代码来显示从 MySQL 到 Handlebars 的数据?

sql - 我如何在 sequelize 中编写这个 Raw Postgres 查询

node.js - 如何在一个 Express Router.get 中执行更多查询

javascript - 如何在生产环境中运行 Node.js REST API 应用程序

javascript - 回调 NodeJS 并使用 mongoose 插入数据

javascript - NodeJS - 如何向 MySQL 插入多行

jquery - 使用jade(nodejs模板引擎)创建jquery ui选项卡

node.js - 蒙戈 : Storing user-specific data for a document

express - 在数据库中保存 Sequelize 查询文本

javascript - 使用 Graphql 时在 Mongoose 模式中填充 "Ref"