2014-09-26 74 views
1

我正在学习流星,同时尝试使用TwitchTV API。流星 - 服务器端API调用并每分钟插入到mongodb中

我现在的目标是每分钟调用一次TwitchAPI,然后将部分json对象插入到mongo数据库中。由于MongoDB匹配_id和Twitch使用_id作为它的关键,我希望后续插入将更新现有记录或创建一个新的_id不存在。

调用和插入(至少是最初的一个)似乎工作正常。但是,我似乎无法使Meteor.setTimeout()函数正常工作。该电话会在我启动应用程序时发生,但不会每分钟持续发生。

这是我在.js。文件在我的服务器文件夹中:

Meteor.methods({ 
    getStreams: function() { 
     this.unblock(); 
     var url = 'https://api.twitch.tv/kraken/streams?limit=3'; 
     return Meteor.http.get(url); 
    }, 
    saveStreams: function() { 
     Meteor.call('getStreams', function(err, res) { 
      var data = res.data; 

      Test.insert(data); 
     } 
    } 
}); 

Deps.autorun(function(){ 
    Meteor.setTimeout(function(){Meteor.call('saveStreams');}, 1000); 
}); 

任何帮助或建议表示赞赏。

+2

我想你需要使用[Meteor.setInterval](http://docs.meteor.com/#meteor_setinterval)而不是Meteor.setTimeout这个用例。 – richsilv 2014-09-26 04:22:16

+0

Deps.autorun不应该用于服务器端,而应该使用Meteor.startup。 – saimeunt 2014-09-26 09:12:54

+0

@richsilv这解决了我的问题。不知道我错过了这个功能。非常感谢! – tehaaron 2014-09-27 03:16:55

回答

1

我做了@richsilv和@saimeunt提到的变化,它工作。结果码:

Meteor.startup(function(){ 
    Meteor.setInterval(function(){Meteor.call('saveStreams');}, 1000); 
}); 
+0

由于函数以millisecounds作为参数,它会每隔一秒执行一次呼叫。 setTimeout(function,ms)和setInterval(function,ms) – Christian 2016-03-08 12:53:42