【问题标题】:Meteor.publish callback not being calledMeteor.publish 回调未被调用
【发布时间】:2015-06-14 10:35:16
【问题描述】:

我有一个非常简单的项目,只有一个 Meteor.publish 调用:

Boxes = new Meteor.Collection("boxes");

if (Meteor.isServer) {
  Meteor.startup(function () {
    Boxes.remove({}) //clearing the database
    Boxes.insert({ //adding one element to the database
      boxes: [1],
      currentId: 1
    });
  });
  console.log("publish1")
  Meteor.publish("boxes", function() {
    console.log("publish2") //this does not run! ever!
    return Boxes.find();
  });
}

由于某种原因,我的 Meteor.subscribe 似乎没有工作(集合总是返回空),所以我在我的代码中放置了几个 console.log。出于某种原因,我的服务器代码会打印“publish1”,但不会打印“publish2”,而如果我在示例项目中尝试相同,它会同时打印两者。

注意:我删除了自动发布包。

【问题讨论】:

    标签: javascript meteor


    【解决方案1】:

    您需要在客户端订阅它。这对我有用:

    Boxes = new Meteor.Collection("boxes");
    
    if (Meteor.isServer) {
     Meteor.startup(function () {
      Boxes.remove({}) //clearing the database
      Boxes.insert({ //adding one element to the database
        boxes: [1],
        currentId: 1
      });
    });
    console.log("publish1")
    Meteor.publish("boxes", function() {
        console.log("publish2") //this does not run! ever!
        return Boxes.find();
      });
    }
    
    if(Meteor.isClient){
    
      Meteor.subscribe('boxes');
    
    }
    

    publish2 只有在您在浏览器中打开应用时才会打印出来。

    【讨论】:

    • 是的,只有在用户实际请求数据时才调用发布回调是有意义的。我的问题与此无关
    【解决方案2】:

    在路径(your_project/server/) 中创建一个单独的 JavaScript 文件为 publish.js,并将发布函数放在该文件中。

    Meteor.publish("boxes", function() {
      console.log("publish2") //this does not run! ever!
      return Boxes.find();
    });
    

    然后在客户端的相应JS文件中订阅此发布为

    Meteor.subscribe('boxes');
    

    【讨论】:

    • 如果它仍然引发权限或访问“框”的异常,那么您必须在your_project/shared/collections.js 中添加以下代码。 Boxes = new Meteor.Collection("boxes"); Boxes.allow({ insert: function () { return true; }, update: function () { return true; }, remove: function () { return true; } }); 如果需要,可以查看我之前的SO Question 类似的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多