嗨我开始使用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();
返回[]
任何想法?
答案 0 :(得分:3)
这是正常行为。 client
和server
被meteor视为特殊文件夹,其中只有客户端或服务器才会执行它们包含的代码。它相当于隐式if (Meteor.isServer)
当您在client
文件夹 中声明一个集合时,它只会在您的客户端数据库MiniMongo中创建一个空集合。因此,您的MiniMongo集合没有任何服务器端的链接,"真正的" mongodb集合。这就是您无法访问保存到实际mongodb数据库中的数据的原因。
所以为了解决这个问题,你可以做的是:
client
和server
文件夹之外的单独的js文件中声明您的收藏集一次,以便双方都知道该收藏集(大多数情况下建议) 。我在我的应用程序根目录中使用了collections
文件夹client
文件夹中,一次放在应用根目录的server
文件夹中(在特定情况下有用,例如上限收藏等等)