2013-06-22 102 views
1

我试图获取数据,但我不知道为什么它不工作猫鼬findOne不执行

module.exports.addUser = function(firstName, lastName, userName, pwd, dob, email){  
    mongoose.connect('mongodb://localhost/testdb'); 

    var user = mongoose.model('user.profile', profile_schema); 

    var newuser = new user(); 
    newuser.dob = dob; 
    newuser.name.first = firstName; 
    newuser.name.last = lastName; 
    newuser.name.user = userName; 
    newuser.pwd = crypto.createHash('md5').update(pwd).digest("hex"); 
    newuser.email = email; 

    newuser.save(function (err) { 
     if (err) console.log(err); 
     // saved! 
    }); 

    user.findOne({'email':'[email protected]'}, function(err, data){ 
     console.log('here'); 
     console.log(data); 
     console.log(err); 
    }); 
    mongoose.disconnect(); 
}; 

我使用此代码添加用户:addUser('hii','heee','sss','123456','28/05/1991','[email protected]');

这没关系当代码将数据添加到数据库中(没有错误,我查了控制台数据库),但我不能得到任何东西(没有日志显示),即使我不变的情况

user.findOne({}, function(err, data){ 
      console.log('here'); 
      console.log(data); 
      console.log(err); 
     }); 

谁能帮助我?谢谢。

+0

除了'here',你的日志输出是什么? – verybadalloc

+0

控制台上没有'here'或任何输出。我不知道为什么。 –

+0

你能检查代码执行吗?在'findOne'块 – verybadalloc

回答

1

如果没有错误,您必须在保存回调中移动findOne函数。 或者向addUser添加一个参数'callback',在保存回调中调用它并使用包含findOne的函数调用addUser。

+0

谢谢。我发现了问题并发布了回复:) –

3

最后,我明白了这个问题。 NodeJS异步工作;它不会等待很长时间的流程。所以,在我的代码中,如果我在发出mongoose.disconnect命令时不小心,一些任务不能完成他们的工作。只需将该命令放入我工作的最后一次回调(findOne函数回调)中,就可以使所有工作都成功。

newuser.save(function (err, doc) { 
     console.log('nothing'); 
     if (err) console.log(err); 
     user.findOne({'email':'[email protected]'}, function(err, data){ 
      console.log('here'); 
      console.log(data); 
      console.log(err); 
      mongoose.disconnect(); 
     }); 
     // saved! 

    }); 

感谢大家的帮忙!