如何从服务器上设置的文件范围变量读取客户端上的数据?

时间:2014-01-08 20:33:23

标签: javascript web-services d3.js meteor

我是meteor(和javascript)的新手,并尝试创建一个简单的应用程序,它将从web api中读取一些数据并创建图表。

我检索的数据不需要存储在数据库中。我天真的方法包括创建一个带有文件范围的变量来存储数据,在启动时在服务器上发出http请求,然后从客户端的变量中读取数据以使用d3.js创建图表。稍后我将添加代码以指定的间隔检索数据,但我只是想弄清楚如何将数据从服务器传递到客户端。

这是js文件的相关部分......

var dayData = "";

if (Meteor.isServer) {
  Meteor.startup(function () {
    dayData = HTTP.call("GET",
             "http://finance.yahoo.com/d/quotes.csv?s=AAPL+GOOG&f=nb2b3");
    console.log(dayData.content); // check to see data exists 
  });
} 


if (Meteor.isClient) {
  Template.hello.rendered = function () {
    var self = this;

    if (! self.handle) {
      self.handle = Deps.autorun(function () {

        d3.csv.parse(dayData.content, function(data) {
          d3.select("#example")
              .datum(data)
              .call(chart);
        });  
      });
    }
 };

在代码的客户端部分中,dayData设置为“”,而不是我在服务器端代码上打印到终端的结果对象的内容。

我的第一个问题是为什么dayData变量在客户端读取时不包含http请求中的结果对象?我的第二个问题是什么是在服务器上读取远程数据并以某种方式访问​​客户端上的数据而不需要使用数据库的最佳实践?

1 个答案:

答案 0 :(得分:0)

1)在客户端上,变量Meteor.isServerfalse,因此不会执行if块,因此不会发生HTTP调用,并且不会初始化变量。 / p>

2)使用方法:

var dayData;

...

if(Meteor.isServer) {
  Meteor.methods({
    getDayData: function() {
      return dayData;
    },
  });
}


if(Meteor.isClient) {
  Meteor.startup(function() {
    Meteor.call('getDayData', function(error, result) {
      dayData = result;
    });
  });  
}