Meteor发布/订阅无法从服务器文件夹中运行

Meteor publish/subscription not working from server folder

本文关键字:服务器 文件夹 运行 发布 Meteor      更新时间:2023-09-26

我制作了一个简单的流星应用程序,用于学习如何进行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');

我在一个模板中有一个for each循环,用来显示用户返回的信息。当我的服务器main.js在服务器文件夹中时,我的模板循环只返回CRUD调用,服务器工作正常。如果我将服务器main.js文件移到项目的根目录中,一切都会按预期进行。然而,这是否违背了发布/订阅方面的目的:将主集合保留在服务器端,同时只向用户显示他们自己的数据?

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

您尚未在客户端上创建Collection。因此,您已经订阅了它,但无法访问带有变量的数据。要解决此问题,只需将Dist = new Mongo.Collection('dist');放在共享文件夹中(除clientserverprivate之外的任何文件夹…)或同时放在两个位置即可。

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

将它放在共享文件夹中可以让您一次性编写代码并在任何地方执行
声明集合不会自动使其充满服务器上的所有数据(除非您有autopublish)。它只是在客户端上做了一个终点,你必须用订阅和精心编写的有边界的出版物来填写。

相关文章: