从客户端文件夹

时间:2015-07-11 17:40:13

标签: mongodb meteor meteorite

嗨我开始使用meteor,所以我遇到了一个问题:我无法从客户端文件夹访问集合 我的项目结构是默认的: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();返回[]

任何想法?

1 个答案:

答案 0 :(得分:3)

这是正常行为。 clientserver被meteor视为特殊文件夹,其中只有客户端或服务器才会执行它们包含的代码。它相当于隐式if (Meteor.isServer)

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

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

  • 在您的clientserver文件夹之外的单独的js文件中声明您的收藏集一次,以便双方都知道该收藏集(大多数情况下建议) 。我在我的应用程序根目录中使用了collections文件夹
  • 将您的收藏集声明两次:一次放在client文件夹中,一次放在应用根目录的server文件夹中(在特定情况下有用,例如上限收藏等等