我正在探索Jade作爲Node中的視圖引擎,並花了3個小時無法將對象(來自數據庫的響應)傳遞給Jade視圖而沒有出現錯誤。Jade從路由器傳遞對象/數組時得到錯誤
從我的路由器all
是對象的數組:
var router = express.Router();
router.get('/all', function(req, res){
db.findAll().then(function(all){
res.render("index", { creators: all });
});
});
玉觀點:
doctype html
html
head
title my jade template
body
.comment_list
each el in creators
p= el.creator
正如你看到它是非常簡單的。我見過使用玉器的20多個例子,做同樣的,總是出現此錯誤:
> TypeError: index.jade:7
5| body
6| .comment_list
> 7| each el in creators
8| p= el.creator
Cannot read property 'length' of undefined
直到我終於嘗試each el in creators
之前做了檢查if(typeof(creators) != "undefined")
和猜測什麼......奇蹟發生了。錯誤消失了。
我寫這篇文章是爲了參考所有用同樣的問題掙扎的人,我想問一下這個錯誤的原因是什麼以及爲什麼在Jade的文檔中沒有提到應該做出這樣的迭代通過集合之前檢查未定義?
嗨@Steven Schobert,謝謝你的解釋!但是爲什麼沒有定義?我傳遞一個現有的對象,但如果沒有,如果/檢查 - 它會拋出錯誤。我真的不明白這種行爲背後的邏輯是什麼。 – Todo 2014-11-05 21:55:06
你確定它是一個數組每次都被傳遞嗎?嘗試在'render'調用之前放置'console.log(all)'。 – 2014-11-05 22:16:04
是的,如果我console.log(全部)就在你的渲染調用之前。 - 史蒂文Schobert 9小時前它是未定義的,但如果我聲明:h2 =創造者它呈現/打印整個對象沒有問題。但是,如果我想從創建者對象中獲取特定的對象 - 它會拋出錯誤。 P.S你如何突出評論中的代碼片段? – Todo 2014-11-06 07:58:07