从客户端文件夹访问集合

Access to collection from client folder

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

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

然后我创建了一个 mongo 集合,我将它添加到 testApp.js

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

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

但是当我将 testApp.js、testApp.css、testApp.html 移动到名为 /client

的新文件夹时
/testApp
--.Meteor/
--client/
----testApp.html
----testApp.css
----testApp.js

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

有什么想法吗?

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

当您在 client 文件夹 中声明一个 collection 时 ,它只会在您的 [=38] 中创建一个空的 collection =] 数据库,MiniMongo。因此,您的 MiniMongo collection 对任何 server-side、"real" mongodb collection 都没有 link。这就是为什么您无法访问保存到实际 mongodb 数据库中的数据的原因。

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

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