-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目標函數,它顯示空值。
您是否獲得了循環後該值? – abdulbarik
說實話:看起來你不知道如何使用Node的異步特性,並試圖用全局變量(這不是你的問題的解決方案)解決它。我認爲如果你開始使用更簡單的東西(在你發佈的代碼中有很多移動部分),並且閱讀關於如何處理異步函數的很好的教程,會更容易。 – robertklep
如果你想看到你的數據,你可以在你的'toArray'方法的回調函數中移動'console.log'語句。但我也同意@rokeryklep。 – Mike