Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
客户端订阅未从Meteor服务器发布接收数据_Meteor - Fatal编程技术网

客户端订阅未从Meteor服务器发布接收数据

客户端订阅未从Meteor服务器发布接收数据,meteor,Meteor,我已经把头撞在墙上有一段时间了,我想我错过了一些简单的东西 我正在我的Meteor服务器上运行此命令: /--Collections--- 项目=新Meteor.Collection(“项目”); 团队=新流星收藏(“团队”); //---仅为我的团队中的用户发布用户数据--- Meteor.publish('team',function()){ var team=Meteor.users.findOne({u id:this.userId}).profile.\u team; log(Mete

我已经把头撞在墙上有一段时间了,我想我错过了一些简单的东西

我正在我的Meteor服务器上运行此命令:

/--Collections---
项目=新Meteor.Collection(“项目”);
团队=新流星收藏(“团队”);
//---仅为我的团队中的用户发布用户数据---
Meteor.publish('team',function()){
var team=Meteor.users.findOne({u id:this.userId}).profile.\u team;
log(Meteor.users.find({'profile.\u team':team},{fields:{{\u id:1,profile:1}}).fetch());
返回Meteor.users.find({'profile.\u team:team},{字段:{{{u id:1,profile:1}});
});
这将通过在
配置文件中具有与当前登录用户相同id的所有用户文档上运行查询来查找同一“团队”中的所有用户。\u team
属性。您将看到
console.log(…)
现在,我正在我的客户机上运行此命令:

/---数据---
Meteor.订阅(“团队”);
团队=新流星收藏(“团队”);
Template.team.team=函数(){
console.log(Team.findOne());
返回团队。查找();
};
但是,
console.log(Team.findOne())
总是记录未定义的日志,
Team.find()
总是返回一个空数组。我在做什么错误的事情,阻止我的文档到达客户端

更新:这是模板代码。


{{>团队}
团队模板工作

{{{每个队} 每个团队都在工作

{{profile.firstName}{{profile.lastName}} {{/每个}}
“TEAM EACH WORKS”永远不会在
{{{{EACH}}
标记中呈现,但是当“TEAM TEMPLATE WORKS”放置在
{{{EACH}}
标记之前时,会按预期呈现

在客户机上,您指的是集合
团队

Team = new Meteor.Collection('team');
但是,在服务器发布功能中,您将光标返回给
用户

return Meteor.users.find({'profile._team': team}, {fields: {_id: 1, profile: 1}});
从未发布过
团队的任何文档。事实上,您甚至没有在服务器代码中使用
团队
项目

旧答案:

尝试删除
console.log(队友.fetch())
或添加
队友。倒带()

从:

forEach、map或fetch方法只能在游标上调用一次。要多次访问光标中的数据,请使用“倒带”重置光标


使用meteor,订阅
团队需要很短的时间。执行此操作时,
Team.findOne()
将返回未定义,而
Team.find()
将给出一个空数组

如果您等待一两秒钟,客户端上显示的数据应该匹配


您确实将您的
return Team.find()
放在了一个模板助手中,这是被动的。因此,一旦数据到达客户端,UI就应该显示更新的数据,只要您的HTML中有使用
{{{each team}}
helper

的内容,谢谢,我不知道游标需要重绕。我已经删除了对
fetch()
的调用,但不幸的是,它仍然没有解决我的问题。我已经用我现在使用的代码更新了我的问题。我试图通过查找
用户
集合中具有相同
\u团队
id的所有文档,向用户显示其“团队”中其他用户的列表。我不希望用户看到数据库中的所有用户。因此,我创建了一个名为“Team”的已发布集合,该集合对
users
集合运行查询,并返回匹配的文档。
团队
集合并不打算实际存在于磁盘上。这样做不对吗?谢谢你的帮助。看起来制作新的收藏品是错误的做法。我终于能够用这个方法解决这个问题:我明白你的意思,这样做是有道理的,因为它是异步的,但我的模板中没有显示任何内容。我用这个来证明它不起作用:
{{{{{{search team}}{{log“it works!”}{{/each}
。当我在模板助手中记录对我的
项目
集合的查询时,数据的记录与我预期的一样,所以我的困惑是有什么区别?当从用户数据库查询时,可能是某种Meteor用户权限吗?我想我是通过制作自己的发布/订阅功能来解决这个问题的。请发布模板代码。添加了模板代码。这有助于理解客户端通常需要使用与服务器相同的集合名称,但订阅名称可以完全不同,并且需要与发布名称(而不是服务器上的集合名称)匹配。有关详细信息,请参阅。
return Meteor.users.find({'profile._team': team}, {fields: {_id: 1, profile: 1}});