2013-05-17 130 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

您可能需要強制連接池通過傳遞true作爲第一個參數來close在這種情況下關閉。試圖關閉時,也應該提供一個回調,這樣你可以提醒任何問題:

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

@格雷莫你不應該需要,但意想不到的事情正在發生。回調被調用時是否沒有錯誤? – JohnnyHK

+0

完全沒有錯誤。即使使用'close(true)'也沒有幫助。你的代碼打印出「close complete」,並且它永遠不會退出腳本。我需要用'CTRL + C'強制關閉。 – gremo