从MongoDB中检索数据并将其保存到Node.js和Express.js中的全局对象

从MongoDB中检索数据并将其保存到Node.js和Express.js中的全局对象,node.js,mongodb,javascript-objects,Node.js,Mongodb,Javascript Objects,我试图从MongoDB集合中获取数据,然后将其保存到一个全局对象中。稍后我需要将其解析为HTML模板。 这是我的密码: 当用户登录到他的个人资料时:然后我们需要获取他的项目,这里我们调用findeprojects()函数 usrRouter.route('/profile') .all(function (req,res,next) { if(!req.user){ res.redirect('/'); } nex

我试图从MongoDB集合中获取数据,然后将其保存到一个全局对象中。稍后我需要将其解析为HTML模板。 这是我的密码:

当用户登录到他的个人资料时:然后我们需要获取他的项目,这里我们调用findeprojects()函数

usrRouter.route('/profile')
    .all(function (req,res,next) {

        if(!req.user){
            res.redirect('/');
        }
        next();
    })
    .get(function (req,res,userObj) {
       // var proj = findprojects();

        userObj = req.user;
        var pro = {};
        pro = findprojects(userObj);
        res.render('index',{name:userObj.username, email:userObj.email});
        //res.sendFile('profile.html',{root:path.join(__dirname,'../public'),},{name:userObj.username});
    });
以下是findeprojects功能代码:

var findprojects = function(obj) {
var usern = obj.username;
mongodb.connect(url,function(err, db){
  if(err) throw err;

  var collection = db.collection('projects');
    //console.log(usern);
    collection.find({'pusername':usern});
    cursor =db.collection('projects').find({ 'pusername': usern }).toArray(function(err,items){
          //console.log(items);
          var i;
          for(i=0; i<items.length;){
              userProjects.createdBy = items[i].pusername;
              userProjects.proName   = items[i].projectName;
              userProjects.proType   = items[i].projectType;
              userProjects.proDesc   = items[i].projectDesc;
              //return userProjects;
            i = i+1;
          }

    });
    console.log(userProjects);
});
userProjects = {
createdBy:'',
proName:'',
proType:'',
proDesc:''
};

但是,当我在调用findeprojects()函数后控制台userprojects对象时,它会显示空值。

为什么不使用mongoose来建模呢。 它更直观,您无需声明全局对象,也无需在正在执行的for循环中进行映射

另外,您的方法在迭代时有点错误,您不是在覆盖吗? 假设你有两份文件,其中pusername是abdul。 因此,在您的情况下,您松开了第一个对象,它将被第二个对象覆盖

我看到你注释掉了一个返回语句,但即使这样也不能正常工作

从设计的角度来看,您的方法效率不高

在猫鼬中,您可以执行以下操作:

    {

    var userProjectSchema = new mongoose.Schema({
      createdBy: { type: String }
    , proName: String
    , proType: String
    , proDesc: String
    });


// Find a single document by username.
userProjectSchema.findOne({ pusername : 'abdul' }, function(err, resDoc) {
  if (err) return console.error(err);
  // do your html stuff here
});

// Find all documents.
userProjectSchema.find(function(err, results) {
  if (err) return console.error(err);
  // do your html stuff here
});


    }

您是在for循环之后得到这个值的吗?坦率地说:看起来您不知道如何处理节点的异步特性,并且正在尝试使用全局变量来解决它(这不是问题的解决方案)。我认为如果你从更简单的东西开始(在你发布的代码中有很多移动的部分)会更容易,并阅读有关如何处理异步函数的良好教程。如果您只想查看数据,可以在
toArray
方法中将
控制台.log
语句移动到回调函数一侧。但我也同意@rokeryklep。你能帮我吗!有了解异步函数的资源吗?