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