2

私はcompoundjsで作業しており、jugglingdbのmongodbアダプターを使用しています。次のようにして、コントローラーでネイティブの mongodb クライアントを取得して再利用しています。

var db = compound.orm._schemas[0].client;

.collection(name)などのmongodb がサポートする関数を使用できるため、これはうまく機能します.find()。ただし、compoundjs のイニシャライザを作成すると、.client空ですが、そうで_schemas[0]はないようです。例えば:

module.exports = function (compound) {
    var db = compound.orm._schemas[0].client; // _schemas[0] isn't empty as .client was reached.
    db.collection('collection'); // Throws: TypeError: Cannot call method 'collection' of undefined
};

自分で接続を再作成せずに、ネイティブの mongodb クライアントを jugglingdb アダプターから取得するにはどうすればよいですか?

4

1 に答える 1

2

connectedこれは、JugglingDB イベント エミッターからのイベントを使用して実現できます。

module.exports = function (compound) {
    compound.orm._schemas[0].once('connected', function () {
        var db = compound.orm._schemas[0].client;
        db.collection('Module');
    });
};

説明:

JugglingDB がアダプターをロードすると、接続済みイベントをトリガーする finished コールバックが渡されます。mongo アダプターをロードするとき、アダプターは非同期呼び出しを使用してデータベースに接続します。これにより、アダプターが完全に接続される前にイニシャライザーが実行される可能性があります。

于 2014-02-17T22:47:44.300 に答える