猫鼬试图打开未关闭的连接

时间:2013-03-29 22:12:52

标签: node.js mongodb mongoose

这是问题的简化版本,但基本上我正在尝试用mongoose打开2个mongodb连接,并且它给了我“试图打开未关闭的连接”。错误。

代码示例:

var db1 = require('mongoose');
db1.connect('my.db.ip.address', 'my-db');

var db2 = require('mongoose');
db2.connect('my.db.ip.address', 'my-db');

db2.connection.close();
db1.connection.close();

知道如何让它发挥作用吗?

7 个答案:

答案 0 :(得分:45)

connect()打开与db的默认连接。由于您需要两个不同的连接,请使用createConnection()

API链接:http://mongoosejs.com/docs/api.html#index_Mongoose-createConnection

答案 1 :(得分:2)

添加Raghuveer答案:

我还要提到的是,而不是直接使用mongoose(你可能会以这种方式使用它来结束这篇文章):

require('mongoose').model(...);

您将使用返回的连接:

var db = require('mongoose').connect('xxx', 'yyy');
db.model(...);

答案 2 :(得分:2)

我在运行测试时遇到了这个问题。

这就是我解决它的方法。



//- in my app.js file.
try {
    mongoose.connect('mongodb://localhost/userApi2'); //- starting a db connection
}catch(err) {
    mongoose.createConnection('mongodb://localhost/userApi2'); //- starting another db connection
}




答案 3 :(得分:2)

我在使用beforeEach进行单元测试时出现此问题。

当我添加第二个测试时问题出现了,因为const mongoose = require('mongoose'); describe('Your test suite', () => { beforeEach( () => { if (mongoose.connection.db) { return; // or done(); } else { // connect to mongodb }); describe('GET /some-path', () => { it('It should...', () => { }); }); describe('POST /some-path', () => { it('It should...', () => { }); }); }); 被调用了两次。

我已用此代码解决了这个问题:

    id1            p1        p2
 0   1             7.935     5.103
 1   1             7.934     5.112
 2   1             7.936     5.102
 3   1             7.938     5.145
 4   2             7.930     5.191
 5   2             7.945     5.161
 6   2             7.954     5.127

希望它可以帮到你!

答案 4 :(得分:0)

您正在尝试第二次打开默认连接(尚未关闭)。

执行以下操作

var db = require('mongoose'); //note only one 'require' needed.
var connectionToDb1 = db.createConnection('my.db1.ip.address', 'my-db1');
var connectionToDb2 = db.createConnection('my.db2.ip.address', 'my-db2');

答案 5 :(得分:0)

使用mongoose.disconnect(fn)

mongoose.disconnect(() => {

  // here it would be possible "reset" models to fix 
  // OverwriteModelError errors
  mongoose.models = {};

  // here comes your logic like registering Hapi plugins
  server.register(somePlugin, callback);
});

我发现这个问题输入错误信息,尽管我的问题有点不同,但我相信它对使用Hapi的人有用。更具体地说,Hapi + rest-hapi + mocha

使用mocha选项运行--watch时,我遇到了OverwriteModelErrorError: Trying to open unclosed connection errors

答案 6 :(得分:0)

<块引用>

简单的解决方案 -

 Use mongoose.createConnection() instead of  mongoose.connect()
    
    Its occurs because of version issue