特定のコレクションに新しいドキュメントが追加されるたびにメールを送信したいと考えています。Meteor でこれを行うには、サーバー側からコレクションを購読するのが正しい方法ですか?
パブリッシュ/サブスクライブは、オブザーバーをサブスクリプションにアタッチする方法を提供しますが、これはコレクション自体ではなく、クライアントからの接続のみを監視するようです (クライアントがコレクションに接続すると、コレクションのコンテンツ全体で「追加」が呼び出されます)。
特定のコレクションに新しいドキュメントが追加されるたびにメールを送信したいと考えています。Meteor でこれを行うには、サーバー側からコレクションを購読するのが正しい方法ですか?
パブリッシュ/サブスクライブは、オブザーバーをサブスクリプションにアタッチする方法を提供しますが、これはコレクション自体ではなく、クライアントからの接続のみを監視するようです (クライアントがコレクションに接続すると、コレクションのコンテンツ全体で「追加」が呼び出されます)。
これを行う正しい方法は、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>);
私はそうは思わない。しかし、次を使用する良い方法があります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;}
});
拒否機能の横。
-最高、ジャン