Du kan inte använd ett asynkront resultat som returvärde från en funktion. Det är så enkelt. Du måste leverera det asynkrona resultatet till den som ringer via en återuppringning som tillhandahålls som en parameter till funktionen (eller använda terminer/löften och effektivt skjuta upp det steget, men det är mer involverat).
if_exists
ska se ut så här istället:
var if_exists = function(query, where, callback) {
require('mongodb').connect(DB.mongo_url, function(err, db) {
db.collection(where, function(err, coll) {
coll.findOne(query, function(e, r) {
//console.log(r);
if (r === null) {
callback(e, false);
} else {
callback(e, true);
}
// You should either close db here or connect during start up
// and leave it open.
db.close();
});
});
});
}