不需要的连接到MongoDB

我有多个连接到MongoDB的问题。 我使用node.js和mongoose连接到mongo。 我简单的网页连接,执行less量查询,然后closures连接。 但是当我redirect到另一个页面,连接打开两次。 如果我重新加载/redirect页面,另一个连接打开。

我通过连接到数据库

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'); }); 

日志显示,连接已closures。 但是如果我刷新页面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

我简短地看了一下你的代码在github上

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

是的,每个请求一次。 在你的代码中,你有意为每个请求创build一个连接,所以我不明白为什么你对这个事实感到惊讶

但是当我redirect到另一个页面,连接打开两次。 如果我重新加载/redirect页面,另一个连接是打开的。

多个请求创build多个连接? 也许你真正的问题是“为什么我在日志里看不到这样的东西?

 Connected to mongo server. Connection closed. Connected to mongo server. Connection closed. Connected to mongo server. Connection closed. ... 

拳头答案(治愈症状不是疾病): mongoose.connect创build一个单身连接,如果你真的想创build一个连接每个请求,你必须使用mongoose.createConnection请参阅http://mongoosejs.com/docs/connections.html

多个连接

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

第二个答案(治愈这种疾病):我在使用NodeJS的方式上看到了一个概念错误。 您不应该为每个请求创build一个连接,NodeJS不像PHP那样处理(每个请求一个进程,每个请求一个数据库连接),NodeJS可以处理同一进程中的多个并发请求,与共享相同的资源,确实是一个MongoDB连接

你应该真的创build一个MongoDB连接,当服务器启动,并让所有的请求共享相同的连接。 这里是一个文件中的一个简单例子

因为除了AngularJS之外,你实际上使用了一个MEAN栈(MongoDB,ExpressJS,AngularJS,NodeJS),所以你应该看看http://www.mean.io

如果我没有错误的默认连接是5.你可以通过传递一个poolSize来调整它

请看看http://mongoosejs.com/docs/connections.html