从MongoDB中检索数据并将其保存到Node.js和Express.js中的全局对象
我试图从MongoDB集合中获取数据,然后将其保存到一个全局对象中。稍后我需要将其解析为HTML模板。 这是我的密码: 当用户登录到他的个人资料时:然后我们需要获取他的项目,这里我们调用findeprojects()函数从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
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。你能帮我吗!有了解异步函数的资源吗?