sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan eksporterer man et objekt, der kun bliver tilgængeligt i et asynkront tilbagekald?

Den bedste mulighed, da foreslået i kommentarerne af elclanrs , er at eksportere et løfte:

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

(Jeg bruger fantastisk Q bibliotek her.)

Nedenfor er den gamle version af mit svar, efterladt for historiens skyld (men hvis du ikke vil bruge løfter, i stedet for at gå den vej, bør du bruge Matts svar ).

Dens ulempe er, at den åbner en forbindelse hver gang du require('database.js) (undt!)

// 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. Node.js + MongoDB - findOne() returnerer et felt, der ikke virker

  2. Mongoid fejler på ruby ​​1.9.3

  3. Håndtering af asynkrone databaseforespørgsler i node.js og mongodb

  4. StackExchange.Redis - LockTake / LockRelease-brug