Javascript Meteor发布/订阅无法从服务器文件夹工作

Javascript Meteor发布/订阅无法从服务器文件夹工作,javascript,collections,meteor,Javascript,Collections,Meteor,我有一个简单的meteor应用程序,用于学习如何进行CRUD操作。它工作得很好,但我在我的收藏的发布/订阅方面遇到了问题,我一辈子都搞不清楚 我的文件夹结构是 /client /main.js /templates /public /server /main.js 我在服务器文件夹中有一个main.js文件,其中包含具有发布功能的基本集合 /server/main.js Dist = new Mongo.Collection('dist'); Meteor.publ

我有一个简单的meteor应用程序,用于学习如何进行CRUD操作。它工作得很好,但我在我的收藏的发布/订阅方面遇到了问题,我一辈子都搞不清楚

我的文件夹结构是

/client
    /main.js
    /templates
/public
/server
    /main.js
我在服务器文件夹中有一个main.js文件,其中包含具有发布功能的基本集合

/server/main.js

Dist = new Mongo.Collection('dist');

Meteor.publish('dist', function (){
    var currentUser = this.userId;
    return Dist.find({owner: currentUser});
});
在客户端文件夹a下订阅

/client/main.js

Meteor.subscribe('dist');
在一个模板中,我有一个for-each循环,该模板假定为用户显示返回的信息。当我的servers main.js在服务器文件夹中时,我的模板循环只返回CRUD调用,返回服务器正常工作。如果我将server main.js文件移动到项目的根目录中,一切都会正常工作。然而,这是否违背了发布/订阅特性的目的:将主集合保留在服务器端,同时只向用户显示他们自己的数据


我不明白为什么在无休止的谷歌搜索之后会发生这种情况,似乎什么都没有改变。自动发布和不安全也已删除。我认为唯一的第三方软件包是样式引导。

您还没有在您的客户机上创建
集合。因此,您已经订阅了它,但无法使用变量访问数据。要解决这个问题,只需将
Dist=newmongo.Collection('Dist')在共享文件夹中(除了
客户端
服务器
专用
…)或两个位置

我认为你甚至可以像现在一样启动你的应用程序,在浏览器控制台中声明集合,你的数据将可以从客户端
Dist
变量访问

将其放在共享文件夹中,您可以编写一次代码,然后在任何地方执行。

声明集合不会自动使其充满服务器上的所有数据(除非您有
autopublish
)。它只是在客户机上建立了一个端点,您必须用订阅、仔细编写和绑定的发布来填充该端点。

好的,因此我需要在客户机端定义集合,并且由于自动发布已被删除,因此不会使用服务器上主集合中的任何数据填充它?当我发布集合并订阅它时,客户端集合将填充已发布的内容?是的。这就是它的工作方式:每个人都声明一个
集合
,服务器发布其中的一部分,客户端订阅发布并获取选定的数据。