我试图发送一个简单的电子邮件(本地,所以我的环境变量没有设置),我得到:Error: Meteor code must always run within a Fiber. Try wrapping callbacks that you pass to non-Meteor libraries with Meteor.bindEnvironment.
这是我的代码
Meteor.methods({
sendInviteEmail: function(emails) {
console.log("[sendInviteEmails], ", emails);
if (emails !== void 0) {
console.log("[sendInviteEmails] calling meteor method: sendEmail");
return Meteor.call("sendEmail", emails, "email@gmail.com", "test", "test");
}
},
sendEmail: function(to, from, subject, text) {
this.unblock();
Email.send({
to: to,
from: from,
subject: subject,
text: text,
});
},
});
我正在从客户端调用sendInviteEmail(将检查它在服务器上的有效性)并将该数据传递给sendEmail(这就是为什么我目前有一点冗余)。我的代码基本上来自docs.meteor.com,所以我想知道为什么这会出现光纤问题。
谢谢
你的代码对我来说很好。我直接复制了你的代码并调用
Meteor.call("sendInviteEmail", "my.email@mydomain.com")
,一切正常。
我认为你可能没有正确安装email
。如果你从npm包中运行async函数,你会得到这个错误。要安装email
包,需要运行
meteor add email
我猜你把它添加为一个npm包或什么的。我希望这对你有帮助。
如果你对你得到的错误感兴趣,我有很多问题,同样的错误,当我建立一个应用程序,听取postresql触发器。我使用pg包从大气(https://atmospherejs.com/package/postgresql),但要让它工作,我需要在流星的环境中使用Meteor._wrapAsync
包装的功能。下面是一个例子:
// Wrap connect function
pg.wrapped_connect = Meteor._wrapAsync(pg.connect.bind(pg));
// Run connect as usual
pg.wrapped_connect(conParams, function(err, client) {
...
});