0

I kept having this error when i deploy my app onto meteor cloud server.

Meteor code must always run within a Fiber at _.extend.get (app/packages/meteor/dynamics_nodejs.js:14:13) at _.extend.apply (app/packages/livedata/livedata_server.js:1268:57) at _.extend.call (app/packages/livedata/livedata_server.js:1229:17) at Meteor.startup.Meteor.methods.streamTwit (app/server/server.js:50:24)

however, I have already wrapped within Fibers

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);
          });
        }
      );
    }

I don't know what's the reason but someone suggested that i should wrap it with Meteor.bindEnvironment instead. Hence, I did this:

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);
          });
        }
      );
    }

//add question method

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

but now it doesn't even work. I realise that this only happened when I tried to insert some data into mongodb. May I know what is the problem with my code? Thanks! All these codes were written in app/server/server.js

You Hock Tan
  • 995
  • 2
  • 9
  • 18

1 Answers1

0

You shouldn't need to use Meteor.call on the server side. That is for client-side code only. Just call addQn directly or better yet, inline it since it's just one line of code.

Andrew Mao
  • 35,740
  • 23
  • 143
  • 224