我正在尝试将我的服务器集合与我的客户端集合同步。
在服务器上:
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())
在客户端上我得到一个空数组。
如何同步这两个系列?
Meteor Docs说:
订阅记录集时,它会告诉服务器将记录发送到客户端。客户端将这些记录存储在本地Minimongo集合中,其名称与要设置的集合参数相同。 Meteor将对传入属性进行排队,直到您在客户端上使用匹配的集合名称声明Meteor.Collection。
我是否需要进行自动订阅?
答案 0 :(得分:2)
这两个实时自动同步。可能发生的情况是您插入的数据没有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);
答案 1 :(得分:1)
按照此处的教程帮助我解决了我的问题: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})
})