Vous appelez tout de suite la fonction de rappel, mais aller à la base de données prend du temps et se fait donc de manière asynchrone. Au lieu de cela, appelez votre rappel au moment opportun en utilisant l'argument de résultat de la fonction passée comme dernier paramètre au .findOne()
fonction. Le rappel doit obtenir un argument d'erreur et un argument de résultat :
login: function(user, pass, callback) {
db.open(function (err, db) {
if(!err) {
db.collection("users", function(err, collection) {
collection.findOne(
{
"username": user,
"password": pass
},
function(err, item) {
if(!err) {
callback(null,item);
} else {
callback("error");
}
}
);
});
} else {
callback("error",null);
}
});
}
user.login("test", "test", function(err,msg) {
if( err ) {
//error occured above;
} else {
//success
console.log(msg);
}
});
cela ne fait que tirer le même modèle que celui utilisé par le pilote mongodb. J'espère que cela aidera.