我希望在服务器执行一项重要的繁重任务时,在客户端使用被动信息来禁用某些功能。
我尝试使用一个发布但是即使客户端中的订阅是在自动运行中,它也没有更新该字段。我不确定使用出版物是否是最佳选择。
假设我有一个名为“IN_MAINTENANCE”的服务器变量,在客户端我想为维护页面加载一个特定的模板,但绝不允许用户更改它(该变量只应在服务器端定义) )。
如何在不在数据库中存储任何内容的情况下实现此目的?
答案 0 :(得分:1)
非常确定您必须使用数据库才能成为适用于所有用户的响应式更新。您可以使用设置变量,但这需要重新启动应用才能生效。 This answer包含您可以为此重新调整用途的代码。
答案 1 :(得分:0)
我认为你的第一直觉是正确的出版物。对数据更改做出反应是服务器影响客户端的唯一方法。确保您的发布和订阅工作正常,然后在您的自动运行功能中,您可以将用户(和所有用户)带到维护页面。
答案 2 :(得分:0)
这是Meteor脑筋急转弯吗? "没有在db"中存储任何东西是有趣的。
让我们假设您有一些所有客户都会收到的出版物,无论是否已登录,并且预计会返回至少一个文档:
Meteor.publish('default',function(){
let query = ...
let options = ...
return MyCollection.find(query,options);
});
您可以通过不返回任何内容向客户发出信号:
Meteor.publish('default',function(){
if ( IN_MAINTENANCE ) {
return;
} else {
let query = ...
let options = ...
return MyCollection.find(query,options);
}
});
然后在客户端上,您只需查看订阅已准备就绪但空白并根据该布局切换布局。
这个难题有100个解决方案,这只是一个特别笨拙的解决方案。