我遇到与MongoDB的多个连接有问题。
我正在使用Node.js和Mongoose连接到MongoDB。
我的简单网页只是连接,执行少量查询然后关闭连接。
但是当我重定向到另一个页面时,连接会打开两次。
如果我重新加载/重定向页面,则打开另一个连接。
我通过
连接到数据库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日志中是这样的(我确定连接函数只被调用一次)
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)
整个代码在github上:https://github.com/kraag22/graphs/blob/master/app/mongo.js
答案 0 :(得分:2)
我在github上简要查看了你的代码
我确定连接函数只被调用一次
是的,每次请求一次。在您的代码中,您有意为每个请求创建一个连接,因此我不明白为什么您对
这一事实感到惊讶但是当我重定向到另一个页面时,连接会打开两次。如果我重新加载/重定向页面,则打开另一个连接。
多个请求会创建多个连接吗?也许你真正的问题是“为什么我在日志中看不到这样的东西?”
Connected to mongo server.
Connection closed.
Connected to mongo server.
Connection closed.
Connected to mongo server.
Connection closed.
...
拳头答案(治愈症状而不是疾病):mongoose.connect
创建一个单独的连接,如果你真的想为每个请求创建一个连接,你必须使用mongoose.createConnection
见http://mongoosejs.com/docs/connections.html < / p>
多个连接
到目前为止,我们已经看到了如何使用Mongoose的默认连接连接到MongoDB。有时我们可能需要为Mongo打开多个连接,每个连接具有不同的读/写设置,或者可能仅仅针对不同的数据库。在这些情况下,我们可以使用mongoose.createConnection()接受已经讨论过的所有参数,并为您返回一个全新的连接。
第二个答案(治愈疾病):我看到你使用NodeJS的方式存在概念错误。您不应该为每个请求创建一个连接,NodeJS不像PHP一样面向流程(每个请求一个进程,每个请求一个数据库连接),NodeJS可以在同一进程中处理多个并发请求,共享相同的资源,实际上是MongoDB连接
您应该在服务器启动时创建一个MongoDB连接,并让所有请求共享同一个连接。 Here一个文件中的简单示例
由于您事实上使用除AngularJS之外的MEAN堆栈(MongoDB,ExpressJS,AngularJS,NodeJS),您应该查看http://www.mean.io
答案 1 :(得分:1)
如果我没有错误,默认连接是5.您可以通过传递poolSize
来调整它