如何在Meteor中的服务器上反应运行某些东西?

时间:2015-08-17 10:35:22

标签: 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
    });
  });
};

我还可以使用SessionReactiveVar进行操作。不幸的是,所有这些技术仅供客户使用。我需要这样做:

/lib/schemas

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

这是使用.observe的唯一方法吗?这似乎是一件昂贵的事情。我的Services集合很少会发生变化(实际上,此时我想要做的就是在OrderSubmissions完成加载时/lib/schemas中创建/server/fixtures.js模式进入Services集合。)

不幸的是,对于我的情况,Meteor在/lib之前加载了/server中的内容,因此错误地创建了/lib中的架构:

  1. /lib/schemas.js运行并且OrderSubmissions架构取决于要填充的Services,在服务器和客户端上都会错误地创建,因为Services集合中没有任何内容
  2. /server/fixtures.js运行并填充Services集合。
  3. 我需要#2在#1之前发生,但#2需要保留在服务器代码中。我不想将其if(Meteor.isServer)包裹在/lib中,因为它不安全。

1 个答案:

答案 0 :(得分:0)

如果您添加peerlibrary:server-autorun

您可以在服务器上执行以下操作

Tracker.autorun(function(){
  // this code now reruns on the server if there is a reactive dependency enclosed here
})