上一篇我們在Node.js裡讀出MongoDB裡的資料並試圖將之顯示在console跟網頁上。結果我們發現,console顯示的確實是我們想要的資料,但網頁卻無法顯示。
原因其實很簡單,MongoDB是以JSON的格式儲存資料,讀出來的自然也是JSON。JSON資料包含的是Object,直接render的話,模版引擎(template engine)無法處理,只能顯示,我們所看到的一堆Objects的畫面。
所以在送交模版引擎render之前,我們要將Object拆解,這時我們只需要使用Object.keys()來達成。
將"routes/index.js"裡面的"userlist"(上一篇新增)的部分改成下面那樣:
router.get('/userlist', function(req, res) {
var db = req.db;
var collection = db.get('usercollection');
collection.find({},{},function(e,docs){
var objKey = Object.keys(docs);
objKey.forEach(function(objectid){
var items = Object.keys(docs[objectid]);
items.forEach(function(itemkey) {
var itemvalue =docs[objectid][itemkey];
console.log(objectid+': '+itemkey+' = '+itemvalue);
})
})
res.render('userlist', {
"userlist" : doc
});
});
});
在瀏覽器打開"localhost:3000/userlist",console會顯示:
0: _id = 54394911c4988c56a458cdd0
0: username = zack
0: email = zack@zacklive.com
1: _id = 54394e51c4988c56a458cdd1
1: username = testuser2
1: email = testuser2@testdomain.com
2: _id = 54394e51c4988c56a458cdd2
2: username = testuser3
2: email = testuser3@testdomain.com
可以看出原本的Objects已經被拆成一個個的變數,要進一步作處理就簡單多了。
[image credit: Gopal Vijayaraghavan]
(本文同步發表於: NodeJust.com )