2015-08-17 2 views
2

Похоже, что большая часть реактивности находится на стороне клиента.Как реагировать на сервер в Meteor?

У меня есть функция сервера, которую мне нужно запустить на основе количества элементов в коллекции. Эта функция создает схему для коллекции OrderSubmissions на основе количества документов в Services, который изменяется.

На клиенте это легко - я просто сделать

/lib/schemas 

if(Meteor.isClient){ 
    Tracker.autorun(function(){ 
    Meteor.subscribe('services', function(){ 
    // re-creates OrderSubmissions schema any time the Services subscription returns different data 
    }); 
    }); 
}; 

я мог также соорудить что-то с Session или ReactiveVar. К сожалению, все эти методы доступны только клиенту. Мне нужно сделать:

/lib/schemas 

if(Meteor.isServer){ 
    // re-creates OrderSubmissions schema any time Services collection changes 
}; 

Это единственный способ сделать это, чтобы использовать .observe? Похоже, это дорогая вещь. Моя Services коллекции будет меняться очень и очень редко (на самом деле, в этот момент все, что я хочу сделать, это создать OrderSubmissions схемы в /lib/schemas, когда мой /server/fixtures.js по окончанию загрузки материала в Services коллекции.)

К сожалению, для моего случая, Метеора грузы материал в /lib перед тем /server, так что моя схема в /lib создается ошибочно:

  1. /lib/schemas.jsOrderSubmissions работает и схема, которая зависит от Services заселяться, будет создаваться ошибочно и на сервере и на клиенте, потому что есть ничего в коллекции Services.
  2. /server/fixtures.js работает и заполняет коллекцию Services.

Мне нужно # 2, чтобы произойти до # 1, но # 2 нужно оставить в код сервера. Я не хочу обертывать его в if(Meteor.isServer) в /lib, так как он не безопасен.

+0

Вы можете поместить свой код из /lib/schemas.js в 'Meteor.startup (функция() {}); Я считаю, что отложит выполнение до тех пор, пока ваш файл fixtures.js не запустит и не заполнит коллекцию «Сервисы». –

+0

Что касается реактивности сервера, я считаю, что .observe и .observeChanges являются единственными параметрами. –

ответ

0

Если добавить peerlibrary:server-autorun

Вы можете сделать следующее на сервере

Tracker.autorun(function(){ 
    // this code now reruns on the server if there is a reactive dependency enclosed here 
}) 
Смежные вопросы