每次将新文档添加到给定集合时,我都会发送电子邮件。是从服务器端订阅一个集合正确的方式与Meteor这样做?
发布/订阅为attach observers to subscriptions提供了一种方法,但这似乎只监视来自客户端的连接,而不是集合本身(当客户端连接到整个集合内容时,将调用“add”)。
答案 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