sql >> Databáze >  >> NoSQL >> MongoDB

Jak exportovat objekt, který bude dostupný pouze při asynchronním zpětném volání?

Nejlepší možnost, protože navrženo v komentářích od elclanrs , je exportovat slib:

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

(Používám úžasné Q knihovna zde.)

Níže je stará verze mé odpovědi, ponechána kvůli historii (ale pokud nechcete používat sliby, místo toho, abyste se vydali touto cestou, měli byste použít Mattova odpověď ).

Jeho nevýhodou je, že otevře připojení pokaždé, když require('database.js) (průšvih!)

// 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. Jak povolit ReadConcernMajority v MongoDB 3.6.3?

  2. způsob aktualizace více dokumentů s různými hodnotami

  3. Redis — nejlepší způsob, jak uložit velkou mapu (slovník)

  4. Podmnožina pole v potrubí agregačního rámce