MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да експортирам обект, който става достъпен само в асинхронно обратно извикване?

Най-добрият вариант, като предложено в коментарите от elclanrs , е да експортирате обещание:

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

(Използвам страхотен Q библиотека тук.)

По-долу е старата версия на моя отговор, оставена в името на историята (но ако не искате да използвате обещания, вместо да вървите по този път, трябва да използвате Отговорът на Мат ).

Недостатъкът му е, че ще отваря връзка всеки път, когато require('database.js) (жалко!)

// 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. Как да разположите бази данни с отворен код

  2. ImportError:Няма модул с име parse

  3. AJAX извикване към/от MongoDB пример за Node/Express?

  4. Как да съпоставим присъединени колекции с помощта на Laravel и MongoDB?

  5. Условно $търсене в MongoDB?