2013-05-17 3 views
7

Node.js 네이티브 드라이버와 MongoDB 연결을 닫을 수없는 것 같습니다. node replica.js을 실행하면 스크립트가 종료되지 않으므로 어떤 이유로 연결을 닫을 수 없습니다.Node.js로 MongoDB 연결을 닫을 수 없습니까?

다음은 코드입니다. 그것은 복제 세트입니다하지만 난 그게 문제가 있다고 생각하지 않는다 :

var mongodb = require('mongodb') 
    , Db  = mongodb.Db 
    , Server = mongodb.Server 
    , ReplSet = mongodb.ReplSet; 

// Replica set 
var replSet = new ReplSet([ 
    new Server('localhost', 27017), // Primary 
    new Server('localhost', 27018), // Secondary 
    new Server('localhost', 27016), // Secondary 
    ], 
    { rs_name: 'replica', read_secondary: true } 
); 

var db = new Db('test', replSet, { native_parser: true, w: 1 }); 

// Opening 
db.open(function (err, db) { 
    if (err) console.error(err); 

    db.close(); 
}); 

하나의 mongod 인스턴스에 연결이 연결이 닫히지 잘 작동하고 스크립트가 process.exit()의 (robertklep에 의해 제안) 필요없이 종료 전화 :

var mongodb = require('mongodb') 
    , Db  = mongodb.Db 
    , Server = mongodb.Server; 

// Single instance 
var server = new Server('localhost', 27017): 
var db = new Db('test', server, { native_parser: true, w: 1 }); 

// Opening 
db.open(function (err, db) { 
    if (err) console.error(err); 

    db.close(); 
}); 

답변

5

버그가 있으며, 이제 1.3.6으로 수정되었습니다. 며칠 전에 this issue I opened을보세요. 재미있는 점은 MongoDB를 처음 사용한 이유입니다 ...

0

당신은 close에 첫 번째 매개 변수로 true를 전달하여이 경우 폐쇄 연결 풀을 강제해야 할 수도 있습니다. 닫을 때 발생하는 문제에 대해 경고 할 수 있도록 콜백을 제공해야합니다.

db.open(function (err, db) { 
    if (err) console.error(err); 

    db.close(true, function (err) { 
     if (err) console.error(err); 
     else console.log("close complete"); 
    }); 
}); 
+0

왜 두 번째 예제가 강제 실행되지 않고 작동하지만 복제본 집합과의 연결을 강제 종료해야합니까? – gremo

+0

@Gremo 당신은 할 필요는 없지만 예기치 않은 일이 일어나고 있습니다. 콜백은 오류없이 호출됩니까? – JohnnyHK

+0

전혀 오류가 없습니다. 'close (true) '를 사용해도 도움이되지 않습니다. 코드는 "close complete"를 인쇄하고 결코 스크립트를 종료하지 않습니다. 나는 CTRL + C를 눌러 닫아야한다. – gremo

관련 문제