2016-06-01 13 views
0

Hallo Leute, ich bin ziemlich neu beim Erstellen von Modulen. Ich habe ein paar Probleme mit dem Zugriff auf meinen mongodb-Verbindungspool von meiner Hauptanwendung.MongoDB | Node.js Connection Pooling w/module.exports

Hier ist das Modul:

// mongo-pool.js 
// ------------- 

var assert = require('assert'); 
var mongodb = require('mongodb'); 
var MongoClient = mongodb.MongoClient; 
var url = 'connection_url'; 

var mongoPool = { 
    start: function() { 
     MongoClient.connect(url, function(err, db) { 
      assert.equal(null, err); 
      console.log("Successfully connected to mongo"); 

      // Make the db object accessible here? 

     }); 
    } 

} 

module.exports = mongoPool; 

Als ich mongo-pool.js erfordern und rufe mongoPool.start() Es sagt, dass es erfolgreich verbunden mongo, obwohl das db Objekt nicht zugänglich ist Abfrage zu machen. Hier ist die Haupt-js-Datei:

var mongoPool = require('./mongo-pool.js'); 
var pool = mongoPool.start(); 


var collection = pool.db.collection('accounts'); 
collection.update(
    { _id: 'DiyNaiis' }, 
    { $push: { children: 'JULIAN' } } 
) 

Der Variablenpool ist undefiniert. Ich kann nicht herausfinden, warum, ich habe return db im Modul versucht, schien nicht zu funktionieren.

Jede Hilfe wird geschätzt, danke!

Antwort

0

Ein Kumpel von mir half mir herauszufinden, was das Problem war, hier ist die Lösung, wenn jemand hineinläuft.

Ich aktualisiert meine mongo-pool.js Modul und die DB-Eigenschaft an sich selbst vergeben:

var assert = require('assert'); 
var mongodb = require('mongodb'); 
var MongoClient = mongodb.MongoClient; 
var url = 'my_database_url'; 

var mongoPool = { 
start: function() { 
    MongoClient.connect(url, function(err, db) { 
     assert.equal(null, err); 

     var self = this; 
     self.db = db; 
     // THESE ASSIGNMENTS 

     console.log("Successfully connected to mongo"); 

     // Make the db object accessible here? 

    }); 
} 

} 

module.exports = mongoPool; 

Dann in meiner main.js Datei:

var mongoPool = require('./mongo-pool.js'); 
// Include My mongo global module 

new mongoPool.start(); 
// Initialize the new MongoDB object globally 

setTimeout(function() { 
    console.log(db); 
}, 3000); 
// Set a 3 second timeout before testing the db object... 
// It will return undefined if it's called before the mongo connection is made 

Nun ist die db Objekt ist global von einem Modul zur Verfügung.