2

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

在服务器上:

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。

我需要自动订阅吗?

4

2 回答 2

2

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

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

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

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

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

Meteor.setTimeout(function() { console.log( JobLoopUsers.find().fetch()) }, 3000);
于 2013-02-02T06:48:37.523 回答
1

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

它似乎正在工作。

全球.js:

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

客户端.js:

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

服务器.js:

Meteor.publish("user-data", function(userId){
  return JobLoopUsers.find({meteorUserId: userId})
})
于 2013-02-02T20:25:23.833 回答