Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在node js中跨不同文件共享一个数据库连接?_Javascript_Node.js_Mongodb - Fatal编程技术网

Javascript 如何在node js中跨不同文件共享一个数据库连接?

Javascript 如何在node js中跨不同文件共享一个数据库连接?,javascript,node.js,mongodb,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;

我已经搜索了很多,但仍然无法找到特定的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”


我做错什么了吗?

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

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.


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

为什么不调用
mongo.connect
并在randomfile.js中传递地址?我不明白您希望如何在randomfile.js中获得对数据库的引用。恐怕这就是全部内容。谢谢bluefog。是的,但是如果每次交互我都需要打开一个到db的连接,那么它将引入大量的latancy。我的目标是为每个db创建一个连接,并在所有API/交互中共享。有没有办法做到这一点?@Bhumik创建到数据库的连接通常不是瓶颈。您如何知道重复连接会造成延迟问题?您是否遇到过任何问题?没有,我到目前为止还没有遇到过,但我可以看到,形成连接需要几毫秒的时间,而且由于我正在开发一个可扩展的应用程序,因此当有许多请求形成到同一数据库的连接时,这可能会产生影响。如果我错了,请纠正我。谢谢链接。我已经看过了。因为,我的代码纯粹是后端代码(不使用expressjs),所以这种类型的池不会有帮助。我想我需要使用其他语言来达到这个目的。@Bhumik,这对我来说没有多大意义。连接池可以在
connect
的任何调用上完成。它与
express
毫无关系。