Meteor代码在Meteor服务器中部署时必须始终在光纤中运行



当我将应用程序部署到流星云服务器上时,我一直有这个错误。

Meteor代码必须始终在光纤中运行在_.extend.get(app/packages/metro/dynamics_nodejs.js:14:13)在_.extend.apply(app/packages/livedata/livedata_server.js:1268:57)在_.extend.call上(app/packages/livedata/livedata_server.js:1229-17)在Meteor.startup.Meter.methods.streamTwit(app/server/server.js:50:24)

然而,我已经在光纤中包好了

streamTwit: function (twit){
    var userid = '1527228696';
    twit.stream(
    'statuses/filter',
    { follow: userid},
      function(stream) {
          stream.on('data', function(tweet) {
          Fiber(function(){
            if(tweet.user.id_str === userid)
            {
              Meteor.call('addQn', tweet);
            }
          }).run();
              console.log(tweet);
              console.log('---------------------------------------------------------');
              console.log(tweet.user.screen_name);
              console.log(tweet.user.name);
              console.log(tweet.text);
          });
        }
      );
    }

我不知道是什么原因,但有人建议我用Meteor.bindEnvironment代替它。因此,我这样做了:

streamTwit: function (twit){
    this.unblock(); // this doesn't seem to work
    console.log('... ... trackTweets');
    var _this = this;
    var userid = '1527228696';
    twit.stream(
    'statuses/filter',
    { follow: userid},
      function(stream) {
          stream.on('data', function(tweet) {
           Meteor.bindEnvironment(function () {
            if(tweet.user.id_str === userid)
            {
              Meteor.call('addQn', tweet);
            }
           }, function(e) {
             Meteor._debug("Exception from connection close callback:", e);
         });
              console.log(tweet);
              console.log('---------------------------------------------------------');
              console.log(tweet.user.screen_name);
              console.log(tweet.user.name);
              console.log(tweet.text);
          });
        }
      );
    }

//添加问题方法

addQn:function(tweet){
      questionDB.insert({'tweet': tweet, 'date': new Date()});
    }

但现在它甚至不起作用了。我意识到只有当我试图将一些数据插入mongodb时才会发生这种情况。我可以知道我的代码有什么问题吗?谢谢所有这些代码都是在app/server/server.js 中编写的

您不需要在服务器端使用Meteor.call。这仅适用于客户端代码。只需直接调用addQn,或者更好的是,内联它,因为它只是一行代码。

最新更新