【问题标题】:Access to collection from client folder从客户端文件夹访问集合
【发布时间】:2015-09-30 08:04:51
【问题描述】:

嗨,我开始使用流星,所以我有一个问题:我无法从客户端文件夹访问集合 我的项目结构是默认的:meteor create testApp

/testApp
--.Meteor/
--testApp.html
--testApp.css
--testApp.js

然后我创建一个 mongo 集合并将其添加到 testApp.js

city = new Mongo.Collection('data');

使用meteor 命令运行应用程序,然后我访问 chrome 控制台 city.find().fetch();它工作完美,它返回城市

但是当我将 testApp.js 、 testApp.css 、 testApp.html 移动到名为 /client 的新文件夹中时

/testApp
--.Meteor/
--client/
----testApp.html
----testApp.css
----testApp.js

我无法从 chrome 控制台获取集合,这意味着 city.find().fetch(); 返回 []

有什么想法吗?

【问题讨论】:

    标签: mongodb meteor meteorite


    【解决方案1】:

    这是正常行为。 clientserver 被流星视为特殊文件夹,分别只有客户端或服务器将执行它们包含的代码。它相当于一个隐含的if (Meteor.isServer)

    当您在client 文件夹中声明一个集合时,它只会在您的客户端数据库 MiniMongo 中创建一个空集合。因此,您的 MiniMongo 集合没有链接到任何服务器端的“真实”mongodb 集合。这就是为什么您无法访问保存到实际 mongodb 数据库中的数据的原因。

    所以为了解决这个问题,你可以做的是:

    • 在您的clientserver 文件夹之外的单独的js 文件中声明您的收藏,以便双方都知道该收藏(在大多数情况下推荐)。为此,我在应用程序的根目录中使用了 collections 文件夹
    • 两次声明您的收藏:一次在您的client 文件夹中,另一次在您的应用程序根目录下的server 文件夹中(在特定情况下有用,例如封顶收藏等强>)

    【讨论】:

    • 嗨@BraveKenny,我怎么解决不了?
    • 是的,抱歉,忘记给出解决方案...更新我的答案。
    • 是的,我创建了一个文件夹collections,我创建了一个文件并设置了city = new Mongo.Collection('data');,但它仍然不起作用??
    • 这很奇怪。如果您在流星运行时转到另一个终端中的应用程序文件夹,请运行 meteor mongodb.data.find(); 你得到你的城市吗?
    • collections 文件夹位于您的应用程序的根目录,对吗?在client之外?
    猜你喜欢
    • 1970-01-01
    • 2015-08-09
    • 2014-03-22
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多