我有一个简单的流星应用程序,用于学习如何进行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');放在共享文件夹中(除了clientserverprivate ...以外的任何文件)或放在两个位置。

我认为您甚至可以立即启动您的应用程序,在浏览器控制台中声明集合,然后可以从客户端Dist变量访问您的数据。

将其放在共享文件夹中后,您只需编写一次代码即可在任何地方执行它。
声明Collection不会自动使它充满服务器上的所有数据(除非您具有autopublish)。它只是在客户端上建立一个端点,您必须在该端点上填写“订阅”以及精心编写和限定范围的出版物。

09-30 17:44
查看更多