javascript - 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.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 搜索之后,我无法弄清楚为什么会发生这种情况,似乎没有什么不同。自动发布和不安全也已被删除。我认为唯一的第三方包是样式 Bootstrap 。

最佳答案

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

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

放在共享文件夹中,一次编写代码,到处执行。
声明集合不会自动使其充满服务器上的所有数据(除非您有autopublish)。它只是在客户端上创建了一个端点,您必须用订阅和精心编写的有界发布来填充它。

关于javascript - meteor 发布/订阅不适用于服务器文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29312714/

相关文章:

java - WebSockets如何识别二进制数据延续帧?

javascript - Ember + Handlebars 将 Rails 验证错误渲染为 [object Object]

java - 将集合反序列化为外部数组

javascript - 花在 "ObserveChanges"上的响应时间长 | meteor js

javascript - Meteor和铁路由器,等待登录

javascript - 奇怪的折线图

javascript - 从 JSON 项目构建 JSON 数组

c# - 在紧密循环中交错更新 .net 字典

java - 提高HashSet的速度

javascript - 如何在 Meteor 的同一集合字段中添加来自同一表单的两个输入?