10

バックエンドとして MongoDB を使用するアプリがあります。アプリが起動したら、接続をセットアップし、後でリクエストで使用します。

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

少し明確にするために:

  • 現在、私は「api.js」を持っています。db.once('open', function../* setup */)
  • ご要望に応じて承りますdb.find(conditions, function(err, res) { if (err) ...else ...})

私がやりたいのは、db.find()句の前に接続が有効かどうかを確認することです。そのため、ダウンしている場合は、db 接続の再起動を試みることができます。

PS私が知っている、接続を常に維持するのではなく、おそらく何らかの接続プールなどを設定する必要がありますが、現在はそのまま設定されています。

4

1 に答える 1

9

event を使用して、コールバックとして処理できます。
そして、接続されていないことを識別するグローバル変数を持っているかもしれません。

モジュールとして動作する別の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);
  }
});

申し訳ありませんが、Mongoose を使用していることに気付きましたが、これは若干異なる場合があります。

于 2013-07-22T11:46:45.257 に答える