Json 包含收集数据的页面

Json page with collection data

我是 nodejs 和流星的新手。我需要创建一个页面 content-type application/json 和来自 mongo 集合的数据。所以当收集数据改变时json页面必须改变。

对于 json 页面我使用这个例子:

if (Meteor.isServer) {
  Meteor.startup(function () {

  try{
      var interval =  Meteor.setInterval(function() {
          var result = Meteor.http.call("GET", "http://192.168.2.144//ihale/meteorGetPage" );
          var resultJson = JSON.parse(result.content);
          var json = IhaleCollection.findOne();
          IhaleCollection.update(json, {$set: {json: resultJson}});
      }, 1000);
  }
  catch(err) {
      console.log(err);
  }
  });
     Router.map(function() {
     this.route('jsonExample', {
        where: 'server',
        path: '/json',
        action: function() {
            var obj = IhaleCollection.findOne();
            var headers = {'Content-type': 'application/json'};
            this.response.writeHead(200, headers);
            this.response.end(JSON.stringify(obj));
        }
    });
});
}

Meteor.startup 我开始每秒更新 IhaleCollection。 那么,当 IhaleCollection 更改时,我如何更新 json 页面?

你不能。反正不是这样。 JSON 没有内置机制来检测源是否已更改,并且假设路由器端点正在输出没有 javascript 的原始 JSON 数据,则不会发生自动更新。只有当客户端刷新端点时才会有更新。

Meteor 通过在基础 html 页面中插入 javascript 来处理反应性数据。如果你想利用它,那么你必须编写一个模板,编写一个辅助方法 return JSON 并在正文中使用辅助方法。

辅助方法应如下所示:

Template.jsondoc.helpers{(
  json: function(){
    return JSON.stringify(IhaleCollection.findOne());
  }
})

模板可以这么简单:

<template name="jsondoc">
  {{json}}
</template>

您的路线将像这样简单:

Router.route('/jsondoc');