我试图发送简单的电子邮件(本地,所以我的环境变量没有设置),我得到: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,所以我想知道为什么会出现光纤问题。
非常感谢
答案 0 :(得分:0)
您的代码适用于我。我直接复制你的代码并调用
Meteor.call("sendInviteEmail", "my.email@mydomain.com")
从客户端控制台一切顺利。
我认为您可能错误地安装了email
。如果从npm包运行异步函数,则会出现此错误。要安装email
包,您需要运行
meteor add email
我猜你把它添加为npm包或其他东西。我希望这有帮助。
如果您对错误感兴趣,那么当我构建一个在postresql触发器上监听的应用程序时,我遇到了同样的错误。我在大气层(https://atmospherejs.com/package/postgresql)使用了pg包,但为了让它工作,我需要使用Meteor._wrapAsync
将函数包装在Meteor的环境中。这是一个例子:
// Wrap connect function
pg.wrapped_connect = Meteor._wrapAsync(pg.connect.bind(pg));
// Run connect as usual
pg.wrapped_connect(conParams, function(err, client) {
...
});