4

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

4

2 に答える 2

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();
    });
}
于 2013-03-27T23:07:59.253 に答える
-1

メソッドでそれを行う必要があります。クライアント側のメソッドスタブを実装することで、レイテンシーの補正を維持できます。

クライアントでメソッドを呼び出すと、同じ名前のサーバーメソッドに関連付けられたスタブ関数が定義されます。必要がなければ、メソッドのスタブを定義する必要はありません。その場合、メソッド呼び出しは他のシステムのリモートプロシージャ呼び出しと同じであり、サーバーからの結果を待つ必要があります。

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

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

于 2012-10-30T17:31:55.907 に答える