如何使用Meteor监视服务器对集合的更改?

时间:2012-04-20 19:11:21

标签: javascript mongodb meteor

每次将新文档添加到给定集合时,我都会发送电子邮件。是从服务器端订阅一个集合正确的方式与Meteor这样做?

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

2 个答案:

答案 0 :(得分: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>);

答案 1 :(得分: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。

  

如果至少有一个允许回调允许写入,并且没有拒绝回调拒绝写入,则允许写入继续。 - Meteor Doc。

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

但请注意:如果您使用默认情况下执行的不安全软件包,除非您设置自己的规则,否则将允许一切。正如您刚才所做的那样,您可能希望现在通过添加

来允许插入
YourCollection.allow({
  insert: function (userId, item) {return true;},
  update: function (userId, item) {return true;},
  remove: function (userId, item) {return true;}
});

旁边的拒绝功能。
-best,Jan