我有一个简单的流星应用程序,用于学习如何进行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});
});
并在客户端文件夹下进行订阅
/client/main.js
Meteor.subscribe('dist');
我在模板中的每个循环中都有一个,用于为用户显示返回的信息。当我的服务器main.js位于服务器文件夹中时,我的模板循环不返回任何内容,但CRUD调用可以使服务器正常工作。如果将服务器main.js文件移至项目的根目录,则一切都会按预期进行。但是,这是否违背了发布/订阅方面的目的:将主集合保留在服务器端,而仅向用户显示他们自己的数据呢?
在无休止的Google搜索似乎无济于事之后,我不知道为什么会发生这种情况。自动发布和不安全也已删除。我相信唯一的第三方软件包是样式引导。
最佳答案
您尚未在客户端上创建Collection
。因此,您已经订阅了它,但是无法使用变量访问数据。要解决此问题,只需将Dist = new Mongo.Collection('dist');
放在共享文件夹中(除了client
,server
,private
...以外的任何文件)或放在两个位置。
我认为您甚至可以立即启动您的应用程序,在浏览器控制台中声明集合,然后可以从客户端Dist
变量访问您的数据。
将其放在共享文件夹中后,您只需编写一次代码即可在任何地方执行它。
声明Collection不会自动使它充满服务器上的所有数据(除非您具有autopublish
)。它只是在客户端上建立一个端点,您必须在该端点上填写“订阅”以及精心编写和限定范围的出版物。