MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Synchrone Funktionsaufrufe für den mongodb-Treiber von nodejs

Das können Sie nicht Verwenden Sie ein asynchrones Ergebnis als Rückgabewert einer Funktion. So einfach ist das. Sie müssen das asynchrone Ergebnis über einen Callback, der als Parameter für die Funktion bereitgestellt wird, an den Aufrufer liefern (oder Futures/Promises verwenden und diesen Schritt effektiv verschieben, aber das ist komplizierter).

if_exists sollte stattdessen so aussehen:

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