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:

我正试图:

  • 将用户ID传递给模型查询,该查询将从mongo返回用户记录
  • 将此用户对象渲染到我的视图,以便我可以使用其字段 我不太确定出了什么问题-查询函数找到了正确的用户,我可以通过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>
    
    账户页面
    
    为什么,你好,这里有{{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()。我只是保持这种方式,因为它更接近你最初所做的