似乎大多数反应都在客户端。
我有一个服务器功能,我需要根据集合中的项目数运行。该函数根据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
集合。)
不幸的是,对于我的情况,Meteor在/lib
之前加载了/server
中的内容,因此错误地创建了/lib
中的架构:
/lib/schemas.js
运行并且OrderSubmissions
架构取决于要填充的Services
,在服务器和客户端上都会错误地创建,因为Services
集合中没有任何内容/server/fixtures.js
运行并填充Services
集合。我需要#2在#1之前发生,但#2需要保留在服务器代码中。我不想将其if(Meteor.isServer)
包裹在/lib
中,因为它不安全。
答案 0 :(得分:0)
如果您添加peerlibrary:server-autorun
您可以在服务器上执行以下操作
Tracker.autorun(function(){
// this code now reruns on the server if there is a reactive dependency enclosed here
})