Node.js Jade在“填充”猫鼬属性的模板中呈现意外值

Node.js Jade在“填充”猫鼬属性的模板中呈现意外值,node.js,express,mongoose,pug,Node.js,Express,Mongoose,Pug,我有一个翡翠模板,我正在打印猫鼬对象的属性。该对象具有通过mongoose的类似dbref的填充功能填充的属性。当模板渲染时,我得到的是废话 简化示例: 途中 User.findById(req.params.user, function(err, user){ res.render('training', {training:user.training}); }).populate('training.details'); 在模板中: a.training-link(href='/tra

我有一个翡翠模板,我正在打印猫鼬对象的属性。该对象具有通过mongoose的类似dbref的填充功能填充的属性。当模板渲染时,我得到的是废话

简化示例:

途中

User.findById(req.params.user, function(err, user){
  res.render('training', {training:user.training});
}).populate('training.details');
在模板中:

a.training-link(href='/training/#{training.details.id}') ...
在浏览器中:

<a href="/training/O &gt;°Cm5�" class="training-link">...</a>
第一次加载页面时,我希望看到一个常规的mongo十六进制字符串4fac4e5f379cb0a6810015d,我得到的结果类似于O>°Cm5�. 这仅在服务器重新启动后加载第一页时发生。所有后续页面加载按预期呈现

这里发生了什么,我该怎么解决


谢谢。

这有点尴尬,但我明白了

在我们的应用程序中有一个逻辑分支,出于各种原因,它会导致我上面问题中的代码在第二次和后续加载上运行,但不会在第一次加载上运行。另一个只在第一次加载时运行的分支进行了类似的查询,但我没有向其中添加“training.details”。我相信胡说八道的弦OèNèu 7°� 是对ObjectId对象而不是填充的training.details调用.id的结果


看来我们需要重构一些代码。

两个问题:1。居住于在您的示例中,您正在填充user.training。您是否也填充了user.training.details?2.渲染前是否确定填充已完成?为什么不在来自populate的回调中进行渲染,而不是在来自findById的回调中进行渲染呢?您完全正确。我的抄本写得马虎。它应该为.填充'training.details'。我编辑了我的问题以反映这一点。