2013-10-06 41 views
0

查看我想:節點快速故障恢復對象從查詢

  1. 通行證用戶的ID,以模型查詢,應從蒙戈返回用戶記錄。
  2. 將此用戶對象呈現給我的視圖,以便我可以使用它的字段。

我不太清楚發生了什麼問題 - 查詢功能找到了正確的用戶,我可以通過console.dir查看所有的字段。當我嘗試將其與res.render回到我的看法,我得到什麼:

這裏是我的路線:

app.get('/account', function(req, res) { 
    res.render('account', {title: 'Your Account', username: req.user.name, user:account.check(req.user.id) }); 
}); 

我的查詢功能:

exports.check = function(userId) { 
MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) { 
if(err) throw err; 
var collection = db.collection('test'); 
collection.findOne({userId : userId}, function(err, user) { 
if (err) throw err; 
console.log("account.check logging found user to console: "); 
console.dir(user); 
return user; 

    }); 
});  
} 

這再次顯示了適當的進入

最後我的看法:

<h1>Account Page</h1> 
<hr> 
<p>Why, Hello, there <b> {{username}} </b> </p><br/> 

<p>You came from {{user.provider}}</p> 

<p>{{user.lastConnected}}</p> 

<a href="/">Go Home</a> ~ <a href="logout">Log Out</a> 

任何舉行將不勝感激!

回答

1

MongoDB findOne函數是異步的(它將回調作爲參數)。這意味着你的檢查函數也需要是異步的,並將回調作爲參數(或返回一個承諾)。

然後你應該調用res.render()在你傳遞給成功查詢的回調中。

app.get('/account', function(req, res) { 

    account.check(req.user.id, function(error, user) { 
    if (error) { 
     // do something smart like res.status(500).end() 
     return; 
    } 
    res.render('account', {title: 'Your Account', username: req.user.name, user:user }); 
    } 

}); 

和校驗功能應該是這樣的:

exports.check = function(userId, callback) { 
    MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) { 
    if(err) { 
     callback(err); 
    } 

    var collection = db.collection('test'); 
    collection.findOne({userId : userId}, function(err, user) { 
     if(err) { 
     callback(err); 
     } 

     console.log("account.check logging found user to console: "); 
     console.dir(user); 

     callback(null, user); 
    }); 
    });  
} 

當然,如果你不需要做任何額外的處理,你可以通過你的回調參數作爲回調集合。找一個()。我只是保持這種方式,因爲它更接近你最初做的事情。

+0

太棒了 - 非常感謝你 - 這很有道理 –