如何在节点js中的不同文件之间共享一个数据库连接?

时间:2015-05-25 17:32:09

标签: javascript node.js mongodb

我搜索了很多但仍无法找到特定的ans。我想做以下事情:

在mongo.js

var client = require('mongodb').MongoClient,
mongodb=null;

module.exports =  {
connect: function(dburl, callback) {
    client.connect(dburl,
        function(err, db){
            mongodb = db;
            if(callback) { callback(); }
        });
},
db: function() {
    return mongodb;
},
close: function() {
    mongodb.close();
 }
};

在server.js

mongodb = require('./mongo');
mongodb.connect('mongodb://localhost:27017/mydb', function() {
 console.log('Connected to MongoDB.');
});

在randomfile.js

 mongodb = require('./mongo');
 mongodb.db()
.collection('mycollection')
.find({someField: 'myquery'}, {}, options)
.toArray(function(err, coll) {
    if (err) { throw err; }
    console.log(coll);
});

当我运行server.js时,会形成一个连接,但是当我运行randomfile.js时,我无法获得连接。我遇到以下错误。

TypeError:无法读取未定义

的属性'collection'

我做错了吗?

1 个答案:

答案 0 :(得分:0)

在回调结束后执行任何操作时,连接不会持续存在。要保留连接,请使用连接池

var db; //global database instance
mongodb.MongoClient.connect(MONGODB_URI, function(err, database) {
  if(err) throw err;

  db = database;  //pool the connection
  coll = db.collection('test');

  app.listen(3000);
  console.log('Listening on port 3000');
});
//No need for further calls to connect(), reuse db
//object. Export to other files if necessary.

More info.

对于更大的应用程序,更好的解决方案是模块化连接并在应用程序的所有文件中再次使用它。