在操作mongodb的时候经常遇到
Error: db object already connecting, open cannot be called multiple times
这种问题。 个人找到了原因,是因为上一次 mongodb.open()
, 还没有来得及 mongodb.close()
就开始了下一次 mongodb.open()
我的疑问是这样的问题一般怎么处理,看到有人说打开一次就不关闭了,一直保持开始状态, 有人又说一直打开不好。
求教~
先打开数据库,取得要获取的数据,然后再关闭数据库,我觉得这种用法应该比较多一些
我开始时这样用的,但是例如我两个ajax请求同事需要访问数据库,会导致一个数据库打开了还没有关闭,另外一个mongodb.open()出错
@guang152252326 你这么一说我也有点迷糊了 但是第二次访问,不是要重新建一个数据库连接吗?两个应该不是共用一个数据库连接
话说,node 是单线程的…你打开了…如果要一直跑的…也没必要关闭啊…
除非你是不需要一直运行的.才需要关闭 -打开
记住node 是单线程的…以前你用别的语言,说打开了,不关闭会导致内存泄露…但是,在node不存在这种情况…
@xiao2013 重新连接时mongodb.open(),如果上一个连接没有关闭就会报错~报 Error: db object already connecting, open cannot be called multiple times
哦,谢谢啦~~我后来就是改为一直打开不关闭了,这样就没有出现问题啦,之前就是担心如果老打开会不会导致问题~习惯性的每次用完就关闭~
打开就不要关了 因为有pool机制 底层会自己帮你处理
mongoDB连接本质就是TCP连接,只要创建新的TCP去连接mongo就可以了,不过需要记住关闭不用的连接。
这个我也遇到过,后来简单的看了一下mongodb的node驱动,发现一种简单的解决办法:
var mongodb = require('./db');
if(!mongodb.openCalled)
mongodb.open(function(err, db){...});
else
mongodb.collection('xxx', function(err, collection){...});
这里有一个openCalled
属性,可以用它来检测数据库是否已經被打开。
如果已经打开,则直接使用,否则再open
。
一种方法是直接从头open到尾。我也不推荐。
另一种就是用mongoose
进程启动,connect 以后,不要关闭,直接用就可以了。不要每个请求都 connect(), close()