【问题标题】:How to sync Client and server Collection on Meteor.js如何在 Meteor.js 上同步客户端和服务器集合
【发布时间】:2013-01-17 12:46:22
【问题描述】:

我正在尝试将我的服务器集合与我的客户端集合同步。

在服务器上:

var JobLoopUsers = new Meteor.Collection("job-loop-users")

Meteor.publish("user-data", function(){
  JobLoopUsers.findOne({meteorUserId : 1});
});

在客户端:

Meteor.subscribe("user-data");

JobLoopUsers = new Meteor.Collection("job-loop-users");

我使用meteor.call在服务器上插入一些测试数据

当我这样做时在服务器上

console.log( JobLoopUsers.find().fetch()[0] )

它显示:

 {meteorUserId: 1
   testData: "My Test Data Here"}

当我这样做时

console.log( JobLoopUsers.find().fetch())

在客户端我只得到一个空数组。

如何同步这两个集合?

流星文档说:

当您订阅记录集时,它会告诉服务器将记录发送到客户端。客户端将这些记录存储在本地 Minimongo 集合中,名称与要设置的集合参数相同。 Meteor 将对传入的属性进行排队,直到您在客户端上使用匹配的集合名称声明 Meteor.Collection。

我需要自动订阅吗?

【问题讨论】:

    标签: meteor


    【解决方案1】:

    这两个是实时自动同步的。可能发生的情况是您插入的数据没有meteorUserId:1,并且它没有发布到客户端,并且您正在搜索所有记录,无论它们是否有meteorUserId:1

    要解决此问题,请尝试更改:

    Meteor.publish("user-data", function(){
      JobLoopUsers.find({});
    });
    

    您不必进行自动订阅,除非您出于某种原因需要更改订阅

    您也可能太早致电console.log( JobLoopUsers.find().fetch()),请尝试等待一两秒,将其替换为:

    Meteor.setTimeout(function() { console.log( JobLoopUsers.find().fetch()) }, 3000);
    

    【讨论】:

    • 客户端仍然没有。也许我命名不正确?为了安全起见,我删除了自动发布包。
    • 更新了我的答案,可能是客户端是异步的,你调用函数太快了
    • 是的,我知道问题在于这个调用 > 不是同步的(尽管它看起来是同步的)。 ..这意味着客户端上的“JobLoopUsers.find().fetch())”行在订阅完成之前不会返回任何内容。这是 Meteor 的一个非常常见的问题,我希望他们能找到解决方法。
    • @AlexMills 您可以使用来自 Meteor.subscribe 的回调,即Meteor.subscribe("xxx", function(err) {...}),或者在允许反应性的地方使用 JobLoopUsers.find().. 以确保订阅完成时运行某些东西
    • @Akshat,你应该把你刚才说的话添加到你的答案中,因为我认为你的答案是错误的/不完整的,但你刚才提到的是正确的
    【解决方案2】:

    按照这里的教程帮助我解决了我的问题:http://andrewscala.com/meteor/

    它似乎正在工作。

    Global.js:

    JobLoopUsers = new Meteor.Collection("user-data");
    

    Client.js:

    Meteor.autosubscribe(function (){
      Meteor.subscribe("user-data", Meteor.userId())  
    })
    

    Server.js:

    Meteor.publish("user-data", function(userId){
      return JobLoopUsers.find({meteorUserId: userId})
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-11
      • 2014-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-31
      • 2012-01-23
      相关资源
      最近更新 更多