Node.js 到MongoDB的不需要的多个连接
我与MongoDB的多个连接有问题 我正在使用Node.js和Mongoose连接到MongoDB 我的简单网页只是连接,执行一些查询,然后关闭连接 但当我重定向到另一个页面时,连接会打开两次 如果我重新加载/重定向页面,另一个连接将打开 我通过网络连接到DBNode.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
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.
...