sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur exporterar man ett objekt som bara blir tillgängligt i en asynkron återuppringning?

Det bästa alternativet, som föreslagna i kommentarerna av elclanrs , är att exportera ett 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();

(Jag använder fantastiska Q bibliotek här.)

Nedan är den gamla versionen av mitt svar, kvar för historiens skull (men om du inte vill använda löften, istället för att gå den vägen, bör du använda Matts svar ).

Nackdelen är att den öppnar en anslutning varje gång du require('database.js) (bra!)

// 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. Hur hittar man array på mongoose doc-objekt?

  2. MongoDB motsvarighet till SQL COUNT GROUP BY

  3. mongorestore misslyckas på grund av ogiltig BSONSize

  4. PyMongo/Mongoengine motsvarighet till mongodump