2013-07-22 13 views
5

MongoDBをバックエンドとして使用しているアプリがあります。アプリケーションが起動すると、私は接続を設定し、後でリクエストで使用します。Node.jsでMongoDB接続が有効かどうかを確認する方法

しかし、私のdb conncetionが失敗した(つまり、mongodがクラッシュする)場合、リクエスト時にそれをどのように確認できますか?ビットを明確にするために

  • 現在、私はリクエストに応じてdb.once('open', function../* setup */)
  • を行う "api.js" を、持っている、私はdb.find(conditions, function(err, res) { if (err) ...else ...})を行います。

私がしたいことは、接続がdb.find()句の前に生きているかどうかを確認することです。だからダウンしている場合、私はdb接続を再開しようとすることができます。

P.S.私はおそらく接続を維持する代わりに何らかの種類の接続プールや類似物を設定しなければならないと思っていますが、今はそのまま設定されています。

+0

[OK]を、最速の方法 - 接続状態のエラーが最初に操作を試み、失敗を再試行すると仮定します(http://stackoverflow.com/questions/8936922/is-inserting-a-new-database) entry-if-the-entry-if-the-first-exists-first-checkingよりも速い)その再試行をカプセル化する最もエレガントな方法は何でしょうか? – Montagist

答えて

5

イベントを使用してコールバックとして処理できます。
グローバル変数を使用して、接続されていないことを確認してください。

別のdb.jsファイルを持つことができます。これはモジュールとして動作します。そして、あなたはそれからコレクションを取得する機能を持つことができます。

var mongodb = require('mongodb'); 
var client; 
var collections = { }; 

new mongodb.Db(...).open((function (err, c) { 
    if (!err) { 
    client = c; 
    client.on('close', function() { 
     client = null; // clear client 
     collections = { }; // clear old collections 
     // connection closed 
    }); 
    } else { 
    // error connecting 
    } 
}); 

// get collection 
exports.get = function(name, callback) { 
    if (client) { 
    if (!collections[name]) { 
     collections[name] = new mongodb.Collection(client, name); 
    } 
    callback(null, collections[name]); 
    } else { 
    // can perform reconnecting and then get collection and call callback 
    callback(new Error('not connected')); 
    } 
} 

だからそれを使用する:

var db = require('./db.js'); 

db.get('users', function(err, collection) { 
    if (!err) { 
    collection.find({ ... 
    } else { 
    console.log(err); 
    } 
}); 

申し訳ありませんが、ちょうどあなたがわずかに異なることができマングースを、使用しているに気づきました。

+1

それは私が現在していることです - 私はそうします。 users.find({}、function(err、res){if(err).... else ...});リクエストを送信する前に接続をテストして、最初に接続を復元しようとする方法があるのだろうかと思います。 – Zlatko

+0

私はより信頼性の高いソリューションを含む、答えを更新しました。 – moka

+0

これがどのように問題に対処するのかわかりません。エラーが発生します。そのエラーは、接続を含むすべてのものではなく、いくつかのことがあった可能性があります。 – Montagist