Mongodb Node Express无法从查询返回要查看的对象
我正试图:Mongodb Node Express无法从查询返回要查看的对象,mongodb,model-view-controller,express,Mongodb,Model View Controller,Express,我正试图: 将用户ID传递给模型查询,该查询将从mongo返回用户记录 将此用户对象渲染到我的视图,以便我可以使用其字段 我不太确定出了什么问题-查询函数找到了正确的用户,我可以通过console.dir查看所有字段。当我尝试使用res.render将其返回到视图时,我什么也得不到: 这是我的路线: app.get('/account', function(req, res) { res.render('account', {title: 'Your Account', username:
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>
账户页面
为什么,你好,这里有{{username}
您来自{{user.provider}}
{{user.lastConnected}
~
如蒙惠顾,不胜感激 MongoDB findOne函数是异步的(它将回调作为参数)。这意味着您的check函数也需要是异步的,并将回调作为参数(或返回承诺) 然后,应该在传递给成功查询的回调中调用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()。我只是保持这种方式,因为它更接近你最初所做的