流星纤维电子邮件

时间:2014-06-09 16:10:59

标签: javascript email meteor node-fibers

我试图发送简单的电子邮件(本地,所以我的环境变量没有设置),我得到: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,所以我想知道为什么会出现光纤问题。

非常感谢

1 个答案:

答案 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) {
  ...
});