【问题标题】:Why is Meteor Mongo collection inaccessible on the client?为什么客户端无法访问 Meteor Mongo 集合?
【发布时间】:2016-06-21 14:17:27
【问题描述】:

我在下面显示了一段代码,它创建了一个 Mongo 集合,如下所示。但是,每当我尝试从 Meteor.isClient 范围内访问集合时,都会出现错误。请任何人发现我的错误。

ImagesCollection  = new Mongo.Collection("Images");
Images  = new Mongo.Collection("Images");

if(Meteor.isClient){
  Template.body.helpers({ images :
        function() {
          console.log("Template Loade");
          return Images.find({},{sort: -1 });
        }
  }) ;

  Template.Images.events({
      'click .js-image' : function(event){
        $(event.target).css("Width", "50px");
      } ,
      'click .js-del-image' : function(event){
          var image_id  = this._id ;
          $("#"+image_id).hide({slow });
          Images.remove({"_id" : image_id});
      },

      'click .js-rate-image' : function(event){
          var  rating =  $(event.currentTarget).data("userrating");
          var image_id =  this.id ;

          Images.find({"_id": image_id});
      }


  });

}

我的 Startup.js 的内容也如下

if(Meteor.isServer){

    Meteor.startup(function(){

      for(var i  = 0 ; i<=23 ;  i++)
      {
          Images.insert({
             'img_src' :  'img_'+i+'.jpg' ,
             'img_alt'  :  'Image number' +  i
           });
            console.log(Images.find().count);
      }
    });
  }

【问题讨论】:

  • 你在使用自动发布包吗?如果没有,您需要发布/订阅您的收藏 (guide)。
  • autoplublish 和不安全的包被添加到我的 web 应用程序中。
  • - 错误信息是什么?
  • 另外,.find() 返回一个游标,而不是一个数组。这就是你想要的吗?

标签: javascript node.js mongodb meteor meteor-collections


【解决方案1】:
consle.log("Template Loade");

由于您没有指定错误,因此上面的行将引发错误。

【讨论】:

  • 我已更正代码中的错字。这不是问题。
【解决方案2】:

从您提供的代码中,我可以看到两个问题。

首先,在您的images 模板帮助程序中,Images.find() 函数调用的第二个参数不正确。您缺少排序操作的文档字段规范。第二个参数需要采用{sort: {'document_field': -1}} 格式。尽管您没有提供您看到的错误文本,但我怀疑该错误与 Mongo 无法处理查询有关,这就是原因。

其次,虽然这不那么严重并且不应该导致您无法访问客户端上的 Images 集合的问题,但在您的服务器 Meteor.startup() 代码中的 console.log() 语句中,您正在访问 count好像它是从 Images.find() 函数调用返回的游标上的一个属性。实际上,它是一个函数,应该像这样调用:Images.find().count()

另外,顺便说一句,我建议您为已定义的两个集合指定不同的名称。如果您尝试通过 Mongo shell 操作数据,给它们两个相同的名称可能会给您带来问题。

【讨论】:

    【解决方案3】:

    我不确定这是否是一个问题,但为什么要初始化两次“图像”集合?

    ImagesCollection = new Mongo.Collection("Images");

    Images = new Mongo.Collection("Images");

    并且 ImagesCollection 不会在您的代码中的任何地方使用。 尝试删除其中一行。

    【讨论】:

      猜你喜欢
      • 2015-10-08
      • 1970-01-01
      • 1970-01-01
      • 2013-05-27
      • 2018-02-03
      • 2014-04-28
      • 2015-02-02
      • 2015-09-22
      • 1970-01-01
      相关资源
      最近更新 更多