Je roept meteen de callback-functie aan, maar naar de db gaan kost tijd en gaat dus asynchroon. Roep in plaats daarvan uw callback op het juiste moment aan met behulp van het resultaatargument van de functie die als laatste parameter is doorgegeven aan de .findOne()
functie. De callback zou een foutargument en een resultaatargument moeten krijgen:
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);
}
});
dit trekt gewoon hetzelfde patroon door dat de mongodb-driver gebruikt. Ik hoop dat het helpt.