【发布时间】:2015-04-25 01:06:30
【问题描述】:
我想在两个 Meteor 应用之间同步数据。因此,我在两个应用程序上发布了一个包含相关数据的集合(显然,它们运行相同的 Meteor 版本 0.8.1.2,具有完全相同的包)。
当我跑步时
var testConnection = DDP.connect('http://10.0.10.20:3003/');
var newCollection = new Meteor.Collection('remoteData', testConnection);
testConnection.subscribe('remoteData');
console.log('Data list starts here:');
newCollection.find().forEach(function(data){console.log(data)});
在任何客户端上,我都会得到所有数据的列表,如预期的那样。服务器端什么都没有,所以 newCollection 保持为空(我从调试中也知道服务器确实执行了 testConnection.subscribe('remoteData') 并且另一台服务器在其相应的发布函数中执行所有内容,就像客户端一样)。
我尝试过这种方式,因为这里的海报https://stackoverflow.com/a/18360441 提到这样的东西在客户端和服务器上都有效。查看 subscribe 的文档(http://docs.meteor.com/#meteor_subscribe)它说它只适用于客户端,这可以解释我的服务器上什么都没有发生,但有点奇怪,因为 DDP.connect(http://docs.meteor.com/#ddp_connect)似乎是为客户端和服务器,支持订阅。
那么我在这里错过了什么吗?如果订阅在这种情况下确实不起作用,那么在两台服务器之间获得类似订阅功能的最佳方法是什么? 我知道我可以使用自定义 Meteor.methods ,但与订阅的效果相比,这似乎有点像拐杖,所以我会对任何更好的解决方案非常感兴趣......
【问题讨论】:
-
也许在回调中尝试
newCollection.find()进行订阅,以确保您在集合有数据之前没有查询它。我有点惊讶客户端上的集合不是空的,也不需要回调或等待。 -
天哪,非常感谢!您的建议与使用 Meteor.setTimeout 或其他任何东西等待一段时间一样有效。也许在客户端 find() 总是等待集合 ready()?我不知道,但因为它对客户端有效,所以我不认为问题是这样的......
-
奇怪的是当使用
autopublish包时,回调中不需要.find()
标签: javascript meteor