我遵循Meteor
的教程我尝试为客户端和服务器创建一个集合。这是我的代码:
var lists = new Meteor.Collection("Lists");
if (Meteor.isClient) {
}
if (Meteor.isServer) {
Meteor.startup(function () {
// code to run on server at startup
});
}
正如我读过的教程,当在服务器上运行时,如果我打开chrome控制台并输入lists
,我将收到Meteor.Collection
。但是当我在我的机器上试过时,我收到了错误:
参考错误。列表未定义
我做错了吗?请告诉我。
谢谢:)
答案 0 :(得分:2)
此外,您可以将所有收藏集放在/lib/collection.js
路线中(以获得更好的做法)。
因此,我们确保流星首先加载集合,并且它们将在客户端/服务器上可用。
你应该删除自动发布/不安全包,以避免流星在加载时发送所有集合并控制谁可以插入/删除/更新集合。
meteor remove autopublish
meteor remove insecure.
所以一个简单的集合看起来就像这样。
//lib/collection.js
Example = new Mongo.Collection("Example") //we create collection global
if(Meteor.isClient) {
Meteor.subscribe('Example') //we subscribe both after meteor loads client and server folders
}
现在/server/collections.js
Meteor.publish('Example', function(){
return Example.find(); //here you can control whatever you want to send to the client, you can change the return to just return Example.find({}, {fields: {stuff: 1}});
});
//这里我们控制集合的安全性。
Example.allow({
insert: function(userId, doc) {
if(Meteor.userId()){
return true; //if the user is connected he can insert
} else{
return false// not connected no insert
}
},
update: function(userId, doc, fields, modifier) { //other validation },
remove: function(userId, doc) { //other validation },
});
只是试着在流星上解释一下这里的集合,希望它可以帮助你GL
答案 1 :(得分:1)
我认为你关闭了autopulish / autosubscribe。尝试
if (Meteor.isClient) {
Meteor.subscribe('lists');
}
if (Meteor.isServer){
Meteor.publish('lists',function(){
return Lists.find();
});
}
对于您的命名,我还建议您改变您对收藏品进行大写的方式。相反,它将是
var Lists = new Meteor.Collection("lists");
最后,查看https://github.com/matteodem/meteor-boilerplate了解您的目录结构,这样您就不必再执行if meteor.is了。
修改的
完整代码应如下所示:
var Lists = new Meteor.Collection("lists");
if (Meteor.isClient) {
Meteor.subscribe('lists');
}
if (Meteor.isServer){
Meteor.publish('lists',function(){
return Lists.find();
});
}
答案 2 :(得分:1)
作为构建过程的一部分,所有脚本源文件都是wrapped in a function closure。为了使您的集合在该文件之外可见(或者在您的情况下 - 附加到window
对象),您需要将其声明为全局变量:
Lists = new Meteor.Collection('lists');
请注意缺少var
。正如@thatgibbyguy指出的那样,接受的模式是大写集合变量和camelcase集合名称。