【问题标题】:Meteor publish/subscription not working from server folderMeteor 发布/订阅在服务器文件夹中不起作用
【发布时间】:2015-03-28 09:58:47
【问题描述】:

我有一个简单的流星应用程序,用于学习如何进行 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 文件移动到我的项目的根目录中,一切都会按预期工作。然而,这是否违背了发布/订阅方面的目的:将主集合保留在服务器端,同时仅向用户显示他们自己的数据?

我无法弄清楚为什么在无休止的 Google 搜索之后会发生这种情况,但似乎没有任何区别。自动发布和不安全也已被删除。我认为唯一的第三方包是引导样式。

【问题讨论】:

    标签: javascript collections meteor


    【解决方案1】:

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

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

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

    【讨论】:

    • 好的,所以我需要在客户端定义集合,并且因为自动发布已被删除,它不会填充服务器上主集合中的任何数据?当我发布集合然后订阅它时,客户端集合会填充已发布的内容?
    • 是的。它是这样工作的:每个人都声明一个Collection,服务器发布其中的一些,客户端订阅发布并获取选定的数据。 More in the doc
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多