1

特定のコレクションに新しいドキュメントが追加されるたびにメールを送信したいと考えています。Meteor でこれを行うには、サーバー側からコレクションを購読するのが正しい方法ですか?

パブリッシュ/サブスクライブは、オブザーバーをサブスクリプションにアタッチする方法を提供しますが、これはコレクション自体ではなく、クライアントからの接続のみを監視するようです (クライアントがコレクションに接続すると、コレクションのコンテンツ全体で「追加」が呼び出されます)。

4

2 に答える 2

3

これを行う正しい方法は、Meteor.methods() を使用してサーバー メソッドを追加することです。そのためのドキュメントはここにあります: http://docs.meteor.com/#meteor_methods

meteor にはまだメール送信機能が組み込まれていないため、メールを送信するには、別のサーバーにリクエストを送信する必要があります。http リクエストを作成するためのドキュメントは次のとおりです: http://docs.meteor.com/#meteor_http_post

小さな例:

Meteor.methods(
  create_document: function (options) {
    //insert the document
    //send a post request to another server to send the email
  }
)

次に、クライアントで次のように呼び出します。

Meteor.call("create_document", <your options>);
于 2012-04-25T18:34:54.390 に答える
1

私はそうは思わない。しかし、次を使用する良い方法がありますYourCollection.deny()

サーバー上:

Meteor.startup(function(){
  YourCollection.deny({
    insert: function (userId, item) {
      // Send your Email here, preferential 
      // in a asynchronous way to not slow down the insert
      return false;
    }
  });
});

クライアントがアイテムを YourCollection に挿入すると、サーバーは最初にすべての拒否関数を 1 つが true を返すまで実行し、それ以外の場合はいずれかが true を返さない限りすべての許可ルールを実行することで、クライアントが許可されているかどうかを確認します。

少なくとも 1 つの許可コールバックが書き込みを許可し、書き込みを拒否する拒否コールバックがない場合、書き込みの続行が許可されます。-- メテオ・ドク。

YourCollection.allow() は、必ずしも実行されるとは限らないため、目的に使用できないことに注意してください (拒否がない場合は、1 つの許可で十分です)。

ただし、注意してください。デフォルトで使用する安全でないパッケージを使用すると、独自のルールを設定しない限り、すべてが許可されます。これを行ったので、おそらく追加して今すぐ挿入を許可したいでしょう

YourCollection.allow({
  insert: function (userId, item) {return true;},
  update: function (userId, item) {return true;},
  remove: function (userId, item) {return true;}
});

拒否機能の横。
-最高、ジャン

于 2013-03-11T17:44:54.453 に答える