1

每次将新文档添加到给定集合时,我都想发送一封电子邮件。从服务器端订阅集合是使用 Meteor 执行此操作的正确方法吗?

发布/订阅提供了一种将观察者附加到订阅的方法,但这似乎只监视来自客户端的连接,而不是集合本身(当客户端连接到它时,“add”被调用整个集合内容)。

4

2 回答 2

3

正确的方法是使用 Meteor.methods() 添加一个服务器方法。相关文档在这里:http ://docs.meteor.com/#meteor_methods 。

要发送电子邮件,您需要向另一台服务器发出请求,因为流星还没有内置的电子邮件发送功能。发出 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 中,服务器会通过首先运行所有拒绝函数来检查他是否被允许,直到其中一个返回 true,否则所有允许规则,除非其中一个返回 true。

如果至少有一个允许回调允许写入,并且没有拒绝回调拒绝写入,则允许写入继续。——流星医生。

请注意,您不能将 YourCollection.allow() 用于您想要的,因为它不一定会运行(如果没有拒绝,则一个允许就足够了)。

但请注意:如果您使用默认使用的不安全包,则除非您设置自己的规则,否则一切都将被允许。当您刚刚执行此操作时,您可能希望通过添加现在允许插入

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 回答