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

エラーがない場合は、save コールバックで findOne 関数を移動する必要があります。または、パラメーター「callback」を addUser に追加し、それを保存コールバックで呼び出し、findOne を含む関数で addUser を呼び出します。

于 2013-06-22T06:53:52.387 に答える