sql >> Database >  >> NoSQL >> MongoDB

Hoe exporteer ik een object dat pas beschikbaar komt in een asynchrone callback?

De beste optie, zoals suggereerde in de opmerkingen door elclanrs , is een belofte exporteren:

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

(Ik gebruik geweldige Q bibliotheek hier.)

Hieronder staat de oude versie van mijn antwoord, links voor de geschiedenis (maar als je geen beloften wilt gebruiken, in plaats van die weg te gaan, moet je Matts antwoord ).

Het nadeel is dat het een verbinding zal openen elke keer dat je require('database.js) (fout!)

// 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. Hoe kan ik sorteren op meerdere velden in mongodb met Perl?

  2. bel een mongo-verzameling met behulp van een variabele

  3. Mongoose Query om een ​​array te filteren en gerelateerde inhoud te vullen

  4. geef resultaten door aan een ander commando in redis