2013-03-29 2 views
38

이것은 단순한 버전의 문제입니다. 그러나 기본적으로 몽구스와 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(); 

어떤 생각?

+1

@NilsH : 사용 환경 : 응용 프로그램과 실행 환경 사이의 느슨한 결합을 만들기 위해 환경에 따라 다른 섹션 (prod, staging, dev)을 사용하는 구성 파일에 의해 결정되는 DB 연결.dev에있는 모든 데이터베이스는 localhost에 있으므로 관리가 쉽습니다. 다른 복제 설정 등을 가진 별도의 컴퓨터에 있습니다. – robbrit

답변

44

connect()은 db에 대한 기본 연결을 엽니 다. 두 개의 서로 다른 연결을 원하므로 createConnection()을 사용하십시오.

API 링크 : http://mongoosejs.com/docs/api.html#index_Mongoose-createConnection

+0

두 개의 데이터베이스에 대한 다중 연결을 생성하는 mongolab에서는 작동하지 않습니다. 'MongoError : 데이터베이스 이름에 몽타쥬의 문자'. ''를 포함 할 수 없습니다. – CENT1PEDE

2

이 Raghuveer 응답에 추가하려면 : 나는 또한 언급 할

대신 직접 몽구스를 사용하는 (당신은 아마 당신이 게시물에 결국이 방법을 사용하는) :

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

당신은 반환 된 연결을 사용합니다 :

var db = require('mongoose').connect('xxx', 'yyy'); 
db.model(...); 
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'); 
2

대신 다음 내 테스트를 실행하는 동안 나는이 문제를 어떻게해야합니까.

이것이 문제를 해결하는 방법입니다. mongoose.disconnect(fn)를 사용

//- 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 
 
}

+2

저는 여전히이 방법을 사용하고 작동합니다! 누군가가 downvote 후 그것에 대해 잘못된 점을 언급하기를 원할 것입니다. – ArchNoob

+0

이것은 실제로 테스트를 위해 실제로 작동한다는 것을 증명할 수 있습니다. – gbozee

0

:

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 + rest-hapi + mocha이다.

--watch 옵션으로 mocha을 실행할 때 나는 OverwriteModelErrorError: Trying to open unclosed connection errors을 모두 마주하고있었습니다.

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...',() => { 

     }); 
    }); 
}); 

는 당신 도움이되기를 바랍니다!

관련 문제