我正在努力:
我不太确定出了什么问题 - 查询功能找到了正确的用户,我可以通过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>
任何举行的人都会非常感激!
答案 0 :(得分:1)
MongoDB findOne函数是异步的(它将回调作为参数)。这意味着您的检查函数也需要是异步的,并将回调作为参数(或返回一个promise)。
然后你应该在你传递的回调中调用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);
});
});
}
当然,如果您不需要进行任何其他处理,您可以将回调参数作为回调传递给collection.findOne()。我只是保持这种方式,因为它更接近你最初做的事情。