Meteor collection 获取 returns 空数组但已订阅

Meteor collection fetch returns empty array but is subscribed

我卸载了自动订阅并重新启动了流星应用程序。从那时起,我就无法在客户端上访问我的 collection 数据。

每个与空数组相关的问题 return 都会得出相同的答案:订阅的数据尚不可用。但是无论我等多久,我都看不到客户端上的数据。

服务器:

Meteor.startup(function () {
  Meteor.publish("states", function () {
    return states.find();
  });
});

在服务器上记录 states.find().fetch() 会按预期吐出我的状态。

在客户端上:

Meteor.subscribe("states", function(){
  console.log(states, states.find(), states.find().fetch());
});

statesstates.find() return objects 符合预期,.fetch() return 和 []

等待(甚至几分钟),然后在浏览器控制台中 运行 states.find().fetch() 仍然 []

想法?

编辑

Collection 在 isServer/isClient 块之外声明(以利用模式)。

states = new Meteor.Collection("states");

我认为你得到 [] 因为你在启动时发布数据,当还没有准备好时,让订阅反应。

Tracker.autorun(function(){
   Meteor.subscribe("states", function(){
      console.log(states, states.find(), states.find().fetch());
   });
});

可选

没有理由在 isServer/isClient if 语句

中声明集合

因为您是从良好实践开始的(删除 insecure/autopublish 包)

让我们继续。

首先创建文件夹结构。 (检查 meteor/structuringyourapp and this SO)。

appName/lib/collection.js 中放入此代码。

states = new Meteor.Collection("states");
//optional you can place this subscribe inside the appName/client/main.js
if(Meteor.isClient){
   Meteor.subscribe("states", function(){
      console.log(states, states.find(), states.find().fetch());
   });
}

以及 appName/server/publish.js

Meteor.publish("states", function () {
    return states.find();
  });