Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.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/6/mongodb/12.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
Node.js 到MongoDB的不需要的多个连接_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js 到MongoDB的不需要的多个连接

Node.js 到MongoDB的不需要的多个连接,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我与MongoDB的多个连接有问题 我正在使用Node.js和Mongoose连接到MongoDB 我的简单网页只是连接,执行一些查询,然后关闭连接 但当我重定向到另一个页面时,连接会打开两次 如果我重新加载/重定向页面,另一个连接将打开 我通过网络连接到DB mongoose.connection.on('connected', function () { console.log('Connected to mongo server.'); }); mongoose.connecti

我与MongoDB的多个连接有问题

我正在使用Node.js和Mongoose连接到MongoDB

我的简单网页只是连接,执行一些查询,然后关闭连接

但当我重定向到另一个页面时,连接会打开两次

如果我重新加载/重定向页面,另一个连接将打开

我通过网络连接到DB

mongoose.connection.on('connected', function () {
    console.log('Connected to mongo server.');

});
mongoose.connection.on('error', function (err) {
    console.log('Could not connect to mongo server!');
});


mongoose.connect(mongoUrl);
断开与

 mongoose.connection.close(function(){
        console.log('connection closed');
    });
日志显示,该连接已关闭。但如果我刷新第4x页,我会在日志中看到

Connected to mongo server.
Connected to mongo server.
Connected to mongo server.
Connected to mongo server.
我错过了什么

在MongoDB日志中是这样的(我确信连接函数只被调用一次)


整个代码都在github上:

如果我没有弄错的话,默认连接是5。您可以通过传递池大小在此处进行调整

请看一看

我在github上简要地查看了您的代码

我确信连接函数只被调用一次

Wed Feb 19 18:56:54.780 [initandlisten] connection accepted from 127.0.0.1:59777 #261 (1 connection now open)
Wed Feb 19 18:56:54.783 [initandlisten] connection accepted from 127.0.0.1:59778 #262 (2 connections now open)
Wed Feb 19 18:56:54.784 [initandlisten] connection accepted from 127.0.0.1:59779 #263 (3 connections now open)
Wed Feb 19 18:56:54.787 [initandlisten] connection accepted from 127.0.0.1:59780 #264 (4 connections now open)
Wed Feb 19 18:56:54.788 [initandlisten] connection accepted from 127.0.0.1:59781 #265 (5 connections now open)
Wed Feb 19 18:56:54.839 [conn261] end connection 127.0.0.1:59777 (4 connections now open)
Wed Feb 19 18:56:54.839 [conn262] end connection 127.0.0.1:59778 (3 connections now open)
Wed Feb 19 18:56:54.840 [conn263] end connection 127.0.0.1:59779 (2 connections now open)
Wed Feb 19 18:56:54.840 [conn264] end connection 127.0.0.1:59780 (2 connections now open)
Wed Feb 19 18:56:54.840 [conn265] end connection 127.0.0.1:59781 (1 connection now open)
是的,每个请求一次。在您的代码中,您有意为每个请求创建一个连接,因此我不理解您为什么会对以下事实感到惊讶:

但当我重定向到另一个页面时,连接会打开两次。如果我重新加载/重定向页面,另一个连接将打开

多个请求创建多个连接,对吗?也许你真正的问题是“为什么我在日志中看不到类似的东西?”

第一个答案(为了治愈症状而不是疾病):
mongoose.connect
创建一个单例连接,如果您确实想为每个请求创建一个连接,则必须使用
mongoose.createConnection
请参阅

多重连接

到目前为止,我们已经看到了如何使用Mongoose的默认连接连接到MongoDB。有时,我们可能需要打开多个连接到Mongo,每个连接具有不同的读/写设置,或者可能只是到不同的数据库。在这些情况下,我们可以使用mongoose.createConnection(),它接受已经讨论过的所有参数,并为您返回一个新的连接

第二个答案(治愈疾病):我发现在使用NodeJS的方式中存在概念上的错误。您不应该为每个请求创建一个连接,NodeJS不像PHP那样面向流程(每个请求一个流程,每个请求一个DB连接),NodeJS可以在同一个流程中处理多个并发请求,这些请求与MongoDB连接共享相同的资源

您应该在服务器启动时创建一个MongoDB连接,并让所有请求共享同一个连接。一个文件中的简单示例

因为除了AngularJS之外,您实际上使用的是平均堆栈(MongoDB、ExpressJS、AngularJS、NodeJS),所以您应该看看

是的,就是这样。“您应该在服务器启动时创建一个MongoDB连接,并让所有请求共享同一个连接。”
Connected to mongo server.
Connection closed.
Connected to mongo server.
Connection closed.
Connected to mongo server.
Connection closed.
...