Mongoose findOne不执行

时间:2013-06-22 03:29:24

标签: node.js mongoose

我正在尝试获取数据,但我不知道为什么它不起作用

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':'abc@gmail.com'}, function(err, data){
        console.log('here');
        console.log(data);
        console.log(err);
    });
    mongoose.disconnect();
};

我使用此代码添加用户:addUser('hii','heee','sss','123456','28/05/1991','abc@gmail.com');

当代码将数据添加到数据库时没有问题(没有错误,我在控制台上检查了数据库)但是我无法得到任何东西(没有显示日志),即使我改变了条件

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

任何人都可以帮助我吗?感谢。

2 个答案:

答案 0 :(得分:3)

最后,我理解了这个问题。 NodeJS异步工作;它不会等待很长时间的流程。因此,在我的代码中,如果我在发出mongoose.disconnect命令时不小心,某些任务无法完成其工作。只需将该命令放在我工作的最后一个回调中(findOne函数回调),就可以使一切正常。

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

    });

感谢大家的帮助!

答案 1 :(得分:1)

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