meteor js创建mongodb数据库钩子,以固定的间隔从API存储数据

时间:2014-12-12 16:22:08

标签: javascript node.js mongodb meteor

tldr - 使用来自API的数据创建“专有数据库”的最佳模式是什么?在这种情况下,在mongo db中使用Meteor JS和集合。

步骤 1. Ping API 2.以某个间隔将数据插入Mongo

在lib / collections.js

Prices = new Mongo.Collection("prices");

基本股票API致电,server.js

Meteor.methods({
  getPrice: function () {
    var result = Meteor.http.call("GET", "http://api.fakestockprices.com/ticker/GOOG.json");
    return result.data;
  }  
});

假设JSON返回干净整洁,我想存储整个对象(如何操作返回的内容并不重要,存储返回值是)

我们可以操纵上面Meteor.method函数中的数据,但我们应该这样做吗?在Angular中,服务用于调用API,但建议将API调用模块化并保持在自己的函数中。让我们借用,Meteor.call以上getPrice

假设这也在server.js中完成(请更正)。

Meteor.call("getPrice", function(error, result) {
  if (error)
      console.log(error)

    var price = result;

    Meteor.setInterval(function() {
     Prices.insert(price);
    }, 1800000); // 30min

});

进入数据库后,可以建立一个pub / sub,我将省略link to this overview

1 个答案:

答案 0 :(得分:1)

您可能需要查看synced-cron package

使用cron工作非常简单,只需调用您的方法:

// server.js

SyncedCron.start();

SyncedCron.add({

  name: "get Price",

  schedule: function(parser){
    return parser.text('every 30 minutes');
  },

  job: function(){
    return Meteor.call("getPrice");
  }
});

然后在getPrice中,您可以var result = HTTP.call(/* etc */);Prices.insert(result);。正如你所指出的那样,你当然会想要一些额外的检查。