2012-10-30 10 views
5

コレクションが更新された後に特定の挿入ステートメントを実行しようとしています。たとえば、ユーザーが埋め込みドキュメントの場所をユーザードキュメントに追加した場合、その埋め込みドキュメントを別の場所コレクションに挿入したいと考えています。サーバー側でこれを行う方法はありますか?そのため、操作は実行されることが保証されていますか?Meteorで保存する前にオブジェクトサーバー側を変更する方法

+0

で私はあなたが更新と挿入の両方を行うための方法のサーバ側を呼び出すことができることを承知していますが、それから、待ち時間補償を除去する負の結果を持っているでしょう私が理解していること。 – HGandhi

答えて

-1

あなたは..あなたは、クライアント側のメソッドのスタブを実装することにより、待ち時間補償を保つことができる方法でそれを行う必要があるでしょう:クライアント上のメソッドを呼び出す

はの サーバーの方法に関連するスタブ関数を定義します同じ名前。あなたがしたくない場合は、 メソッドのスタブを定義する必要はありません。この場合、メソッドコールは他のシステムのリモートプロシージャコールと同様に となり、サーバからの結果は を待つ必要があります。

スタブを定義する場合、クライアントがサーバーメソッドを呼び出すと、 もスタブをパラレルで実行します。クライアントでは、 スタブの戻り値は無視されます。スタブは副作用のために実行されます。 は、サーバのメソッドが実行する結果をシミュレートすることを目的としていますが、往復遅延を待たずに です。スタブが 例外をスローすると、コンソールにログが記録されます。

ここに私の流星スタブの例を参照してください。https://stackoverflow.com/a/13145432/1029644

+0

上記のスタブを実装する方法の例がありますか?私は[この1](http://stackoverflow.com/questions/12231712/when-to-use-meteor-methods-and-utilizing-stubs)のようなStackOverflowのいくつかの例を見ていますが、私はまだ少し混乱していますこれをどのように実装するかについて。 – HGandhi

3

あなたは、私が書いたいくつかのコード(https://gist.github.com/matb33/5258260)を使用して喜んでいる場合は、あなたがそうのようでフックすることができます:

編集:コードは今一部であり、プロジェクトのhttps://github.com/matb33/meteor-collection-hooks

var test = new Meteor.Collection("test"); 

if (Meteor.isServer) { 
    test.before("insert", function (userId, doc) { 
     doc.created = doc.created || Date.now(); 
    }); 

    test.before("update", function (userId, selector, modifier, options) { 
     if (!modifier.$set) modifier.$set = {}; 
     modifier.$set.modified = Date.now(); 
    }); 

    test.after("update", function (userId, selector, modifier, options, previous) { 
     doSomething(); 
    }); 
} 
関連する問題