2016-09-09 16 views
-1

我試圖從MongoDB集合中獲取數據,然後將其保存到全局對象中。我需要將其解析爲HTML模板。 這裏是我的代碼:從MongoDB中檢索數據並將其保存到Node.js和Express.js中的全局對象中

當用戶登錄到他的個人資料:那麼,我們需要讓他的項目,在這裏我們稱之爲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目標函數,它顯示空值。

+0

您是否獲得了循環後該值? – abdulbarik

+2

說實話:看起來你不知道如何使用Node的異步特性,並試圖用全局變量(這不是你的問題的解決方案)解決它。我認爲如果你開始使用更簡單的東西(在你發佈的代碼中有很多移動部分),並且閱讀關於如何處理異步函數的很好的教程,會更容易。 – robertklep

+0

如果你想看到你的數據,你可以在你的'toArray'方法的回調函數中移動'console.log'語句。但我也同意@rokeryklep。 – Mike

回答

2

爲什麼不使用貓鼬來建模你的東西。 它更直觀,你不需要聲明全局對象,並在你正在做的for循環中進行映射。

你的方法在你迭代的時候有點不對,是不是你覆蓋? 說你有兩個文件,其中pusername是abdul。 所以在你的情況下,你鬆開第一個對象將被第二個對象覆蓋。

我看到你註釋掉了一個return語句,但即使這樣也不會正常工作。

從設計角度來看,您的方法效率不高。在貓鼬

你可以這樣做:

{ 

    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 
}); 


    } 
相關問題