每次将新文档添加到给定集合时,我都想发送一封电子邮件。从服务器端订阅集合是使用 Meteor 执行此操作的正确方法吗?
发布/订阅提供了一种将观察者附加到订阅的方法,但这似乎只监视来自客户端的连接,而不是集合本身(当客户端连接到它时,“add”被调用整个集合内容)。
每次将新文档添加到给定集合时,我都想发送一封电子邮件。从服务器端订阅集合是使用 Meteor 执行此操作的正确方法吗?
发布/订阅提供了一种将观察者附加到订阅的方法,但这似乎只监视来自客户端的连接,而不是集合本身(当客户端连接到它时,“add”被调用整个集合内容)。
正确的方法是使用 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>);
我不这么认为。但是有一个很好的方法使用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;}
});
在拒绝功能旁边。
-最好的,扬