MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak wyeksportować obiekt, który stanie się dostępny tylko w asynchronicznym wywołaniu zwrotnym?

Najlepsza opcja, ponieważ sugerowane w komentarzach autorstwa elclanrs , jest wyeksportowanie obietnicy:

// database.js
var MongoClient = require('mongodb').MongoClient,
    Q = require('q'),
    connect = Q.nbind(MongoClient.connect, MongoClient);

var promise = connect(/* url */);        

module.exports = {
  connect: function () {
    return promise;
  }
}

// app.js
var database = require('./database');

database.connect()
  .then(function (db) {
    app.get('/', function (req, res) {
      db.collection(/* … */);
    });
  })
  .catch(function (err) {
    console.log('Error connecting to DB:', err);
  })
  .done();

(Używam niesamowitego Q biblioteka tutaj.)

Poniżej znajduje się stara wersja mojej odpowiedzi, pozostawiona ze względu na historię (ale jeśli nie chcesz korzystać z obietnic, zamiast iść tą drogą, powinieneś użyć Odpowiedź Matta ).

Jego wadą jest to, że otworzy połączenie za każdym razem, gdy require('database.js) (bummer!)

// DO NOT USE: left for the sake of history

// database.js
var MongoClient = require('mongodb').MongoClient;

function connect(cb) {
  MongoClient.connect(/* the URL */, cb);
}

module.exports = {
  connect: connect
}

// app.js
var database = require('./database');

database.connect(function (err, db) {
  app.get('/', function (req, res) {
      db.collection(/* … */);
  });
});


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak skonfigurować Rebusa, aby tematy były oparte na typach obsługi

  2. Jak filtrować elementy tablicy

  3. MongoDB wybierz wszystkie wartości pola gdzie na liście zapytań

  4. Jak agregować i scalać wynik w kolekcję?

  5. Błąd walidacji Mongodb