MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Chamadas de função síncronas para o driver nodejs mongodb


Você não pode use um resultado assíncrono como o valor de retorno de uma função. É simples assim. Você precisa entregar o resultado assíncrono ao chamador por meio de um retorno de chamada fornecido como um parâmetro para a função (ou usar futuros/promessas e efetivamente adiar essa etapa, mas isso é mais complicado).

if_exists deve ficar assim:
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();
      });
    });
  });
}