Meteor.JS:订阅没有工作

时间:2015-05-25 19:42:36

标签: meteor publish-subscribe

我尝试将我的客户端订阅到我的userFriends集合和Chrome的控制台显示:userFriends is not defined

这是我的代码:

服务器端......

userFriends = new Mongo.Collection("friends");
console.log(userFriends.find().fetch())
Meteor.publish("friends", function () {
    return userFriends.find();
});

注意: console.log在终端显示一个空数组,这是好的

客户端......

Meteor.subscribe("friends");
console.log(userFriends.find().fetch())

注意:这是Chrome控制台显示错误的地方

我做错了什么?

谢谢

更新1 :现在我可以在Chrome控制台中看到好友收藏,但我无法插入数据。我在客户端文件夹中的client.js中订阅,我的插入代码在客户端文件夹中的friend.js中也是如此。

3 个答案:

答案 0 :(得分:3)

需要在两者客户端和服务器上定义集合。通常,这是通过将定义放在共享目录(如lib

)中完成的

<强> LIB /集合/用户friends.js

userFriends = new Mongo.Collection('friends');

请注意,约定是使用集合名称的大写驼峰案例版本命名集合。所以称之为Friends会更典型。

答案 1 :(得分:3)

您需要使用共享代码在两个环境中声明集合。

lib/user-friends.js

userFriends = new Mongo.Collection("friends");

client/user-friends.js

Meteor.subscribe("friends", function(){
  console.log(userFriends.find().fetch());
});

在客户端中,请注意,集合订阅本质上是异步的(客户端上存在网络延迟,从服务器获取文档是固有的)。

这就是为什么如果您console.log Meteor.subscribe之后{@ 1}}收集内容,您将获得[],但如果您等到订阅准备就绪后使用回调,则文档将是显示正确。

答案 2 :(得分:1)

你有两个正确的答案,但他们确实为你提供了一些知识。以下是使用Meteor的文件结构(http://docs.meteor.com/#/full/structuringyourapp处提供)的内容。

在/ lib(共享)目录中

制作名为&#34; collections.js&#34;的文件并在其中创建您的收藏。

  

userFriends = new Mongo.Collection(&#34; friends&#34;);

我会改为执行userFriends = new Mongo.Collection(&#34; userfriends&#34;);这样您的收藏总是使用相同的单词,并根据您是否在客户端或服务器上工作而更改大小写。这非常有用。

在您的/客户端目录中

制作名为&#34; subscriptions.js&#34;的文件并在其中订阅您的收藏。

  

Meteor.subscribe(&#39;朋友&#39);

在您的/服务器目录中

制作名为&#34; publications.js&#34;的文件。并在其中发布您的收藏。

  

Meteor.publish(&#39;朋友&#39;,函数(){     return userFriends.find();   });

你不需要取物或任何东西。

基本上你的代码失败了,因为你在哪里试图容纳一切。我给你的是你工作的三个方面。客户端,共享,服务器。以这种方式设置你的应用程序,很容易立即弄清楚你在哪里工作。

希望有所帮助。