2013-05-17 12 views
7

Node.jsネイティブドライバとのMongoDB接続を閉じることができないようです。 node replica.jsを実行すると、スクリプトは終了しないため、何らかの理由で接続を閉じることができません。Node.jsとのMongoDB接続を閉じることができませんか?

ここにコードがあります。これは、レプリカセットだが、私はそれが問題だとは思わない:単一のmongodインスタンスへの接続

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(); 
}); 

がうまく動作しますが、接続が閉じ取得し、スクリプトが終了し、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

なぜ私の2番目の例は強制なしで動作しますが、強制的にレプリカセットとの接続を閉じる必要がありますか? – gremo

+0

@Gremoあなたはする必要はありませんが、予期しないことが起こっています。コールバックはエラーなく呼び出されますか? – JohnnyHK

+0

エラーはまったくありません。 'close(true)'を使っても助けにはなりません。あなたのコードは "close complete"を表示し、スクリプトを終了することはありません。私は 'CTRL + C'で強制終了する必要があります。 – gremo

関連する問題