2015-04-25 2 views
0

Я очень новичок в узлах и метеор. мне нужно создать страницу content-typeapplication/json и данные из коллекции монго. Поэтому при изменении данных сбора данных json-страница должна быть изменена.Json страница с данными сбора

Для JSon страницы я использую этот пример: https://stackoverflow.com/a/23666992/1446182

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 каждую секунду. Так как я могу обновить страницу json, когда IhaleCollection изменить?

ответ

1

Вы не можете. Не так. JSON не имеет встроенного механизма для обнаружения, если источник изменился, и учитывая, что конечная точка маршрутизатора выводит необработанные данные JSON без javascript, автоматических обновлений не произойдет. Только когда клиент обновит конечную точку, будет обновление.

Метеор имеет дело с реактивными данными, вставив javascript на базовую страницу html. Если вы хотите использовать это, вам нужно написать шаблон, напишите вспомогательный метод, чтобы вернуть JSON и использовать вспомогательный метод в теле.

Вспомогательный метод должен выглядеть следующим образом:

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

Шаблон может быть как простой, как:

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

и ваш маршрут будет так же просто, как это:

Router.route('/jsondoc');