2013-10-15 20 views
11

新しいノードに、マングース&のMongoDB - ソースコードを読んでいない...マングース接続を手動で閉じる必要がありますか?

私は、ファイルを開き、ノード・アプリケーションを持つレコードへの行を解析し、MongoDBのために記録を保存します。記録はモンゴースのモデルオブジェクトであり、モンゴルモデルに保存するには、saveメソッドを呼び出します。

だから、私はすべて、マングースが管理している接続について心配していますdb = mongoose.connect(url)。私は手動でそれを閉じる必要がありますか?もしそうなら、私はそれを閉じるべきです(すべてが非同期で起こっているので、いつ接続を閉じるのが難しいですか)。

mongooseは接続を開いたままにしておくだけでなく、スクリプトが終了しないようにしているようです。すべてのオブジェクト上でsaveを呼び出した後、安全にマングース接続を閉じることはできますか?それ以外の場合は、保存の非同期性があるため、接続をシャットダウンするタイミングを正確に知ることは困難です。

答えて

14

あなたが接続を閉じるmongoose.disconnect()を呼び出す必要がありますが、あなたはまた、すべてのsaveのコールが自分の非同期作業を完了するまで待つ必要がそれを行う前に(すなわち、そのコールバックと呼ばれます)。

したがって、追跡し続けるために未処理の人数の単純なカウントを維持するか、asyncのようなフロー制御フレームワークを使用してもう少しエレガントな処理を行います。

6

ノードPOSIX信号が発生しているときに、マングース接続を閉じる必要があります。 SIGINT端末またはサーバーのシャットダウン時にCtrl-Cを押すと、プロセスがトリガーされます。

もう1つのシナリオは、データストリーミングが完了したときに接続を閉じることです。起動時に接続し、シャットダウン時に切断する場合は、とにかく推奨されます。

これは、SIGINT信号の切断コードです。

// If the Node process ends, close the Mongoose connection 
process.on('SIGINT', function() { 
    mongoose.connection.close(function() { 
    console.log('Mongoose disconnected on app termination'); 
    process.exit(0); 
    }); 
}); 
+0

は申し訳ありませんが、これは私のために仕事に行くされ、上記を参照してください。 – hba

+0

ここに良いアドバイス、歓声。 – Spets

関連する問題