2016-11-23 170 views
1

我想从'server/main.js'中的服务器脚本发送消息到'client/main.js'中的Cliente脚本。如何发送消息从服务器到客户端流星?

我尝试了一些发布/订阅的事情,但我一定做了错误的事情。流星服务器运行的控制台因数千条错误消息而变得疯狂。

服务器

Meteor.publish("test", function() { 
    this.ready(); 
    return 'some test'; 
    }); 

客户

Template.panel.onCreated(function loginOnCreated() { 
    Tracker.autorun(function() { 
    const handle = Meteor.subscribe('test'); 
    if(handle.ready()){ 
     alert('Done') 
    } 
    }); 
}); 

无论如何,我需要一台服务器的方法来调用客户端的东西时,它的准备。

原因:Template.panel.onCreated无法从Mongodb查询数据。它必须等待几秒钟。所以我想要做的是不可能在客户端的Template.panel.onCreated中。它必须等到Mongo准备好。

我该怎么做?

+0

服务器控制台上的错误消息是什么? –

回答

0

您可以通过更新数据库并将其客户端辅助方法,提醒这样的事实做服务器想说点什么,或者你可以使用一个包这样的:

https://atmospherejs.com/raix/eventddp

它允许服务器启动消息。我还没有尝试过,但它来自一个很好的来源

1

你应该把Meteor.subscribeTracker.autorun之外。

我认为这个问题是因为handle是一种反应性的数据源,所以当它的变化里面Tracker.autorun重新运行该功能,重新订阅服务器,新的句柄创建新的处理导致函数再次运行。这反复循环并将许多错误消息扔到您的控制台

1

它必须等待几秒钟。

我假设您从Mongo检索的数据是dom人口所必需的。 对于任何等待的过程,你可以使用加载器。你可以通过设置一个'false'的助手来做到这一点,直到你没有得到服务器的响应。当你得到这个响应时,填充dom并将该字段设置为true。

喜欢的东西:

{{#if dataLoaded}} 
    {{domYouWantToPopulate}} 
{{else}} 
    {{spinner}} //your loading icon template 
{{/if}} 

或者即使你不需要的数据DOM仍在加载图标停止用户做一些事情,直到数据被接收。

所以看到的东西是,假设你在开发中,你只有客户端,但在真实情况下,你将有一台服务器和许多客户端。因此,从服务器调用每个客户端的客户端功能在处理和可行性指标上都是错误的。这就是为什么我们有API来从服务器获得响应,所以服务器可以只响应那个已经访问该API的那个客户端。

相关问题