1

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

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

谁能帮我?谢谢。

4

2 回答 2

4

最后,我明白了这个问题。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!

    });

感谢大家的帮助!

于 2013-06-22T14:17:13.923 回答
1

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

于 2013-06-22T06:53:52.387 回答