38

这是问题的简化版本,但基本上我正在尝试使用 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();

知道如何使它工作吗?

4

7 回答 7

46

connect()打开到数据库的默认连接。由于您需要两个不同的连接,请使用createConnection().

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

于 2013-04-07T13:25:51.257 回答
2

要添加 Raghuveer 答案:

我还要提一下,不要直接使用猫鼬(您可能以这种方式使用它,最终会出现在这篇文章中):

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

您将使用返回的连接:

var db = require('mongoose').connect('xxx', 'yyy');
db.model(...);
于 2013-07-19T15:21:24.990 回答
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
}

于 2016-12-31T12:30:54.423 回答
2

我在使用 进行单元测试时遇到了这个问题mocha

当我添加第二个测试时出现问题,因为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...', () => {

       });
    });
});

希望对你有帮助!

于 2017-05-24T01:45:15.877 回答
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');
于 2016-07-23T11:44:49.290 回答
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.

于 2017-02-17T15:42:38.437 回答
0

简单的解决方案 -

 Use mongoose.createConnection() instead of  mongoose.connect()
    
    Its occurs because of version issue
于 2021-05-26T12:56:42.417 回答