2012-05-22 24 views
1

我有一個玉的模板,我打印出一個貓鼬對象的屬性。該對象具有通過貓鼬的dbref-like填充功能填充的屬性。模板呈現時,我得到廢話。玉在模板中呈現意外值爲「填充」貓鼬屬性

簡化的例子:

a.training-link(href='/training/#{training.details.id}') ... 
在瀏覽器

在路由

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

<a href="/training/O &gt;°Cm5�" class="training-link">...</a> 

第一次頁面加載,在哪裏我期望一個正規的mongo十六進制字符串(4fac4e5f379cb0a68100015d)我得到類似「O >°Cm5 」的東西。這隻發生在服務器重新啓動後的首頁加載中。隨後的所有頁面加載都按預期呈現。

這裏發生了什麼,我該如何解決?

謝謝。

+0

有兩個問題:1.'populate' [不是遞歸](https://github.com/LearnBoost/mongoose/issues/601)。在你的例子中,你正在填充'user.training'。你是否也填充'user.training.details'? 2.在渲染之前確定填充已完成嗎?爲什麼不在'populate'的回調中進行渲染,而不是從'findById'回調? – Nate

+0

你是對的。我在抄錄時很sl in。它應該讀取'.populate('training.details')'。我編輯了我的問題來反映這一點。 – smabbott

回答

0

這有點尷尬,但我想通了。

在我們的應用程序中有一個邏輯分支,由於各種原因,導致上面我的問題中的代碼在第二個和後續加載上運行,但不是第一個加載。另一個只在第一個負載上運行的分支會進行類似的查詢,但我沒有將populate('training.details')添加到它。我相信無意義的字符串O¬N_7°¦�是在ObjectId對象上調用.id而不是填充的training.details的結果。

看起來我們需要重構一些代碼。