流星发布/订阅不起作用

时间:2018-07-18 16:15:54

标签: meteor meteor-publications meteor-collections

我正在使用流星1.7,而我的发布/订阅仅返回空数组。 文件结构:

-all/
  -shared.js
-client/
  -main.js
-imports/
  -Elsewhere.js
-server/
  -main.js

shared.js:

Chats = new Mongo.Collection('chats')

client / main.js:

Template.main.onCreated(()=>{
  Meteor.subscribe('chats')
});

server / main.js

Meteor.publish('chats', function(){
  console.log(Chats.find().fetch()) //Shows that I have documents in the collection
  return Chats.find();
});

Elsewhere.js

Template.Elsewhere.helpers({
  chats(){
    console.log(Chats.find().fetch()) //[]
    return Chats.find().fetch()
  }
})

为什么我没有得到我要发布的内容?

-------------------------------------新内容-------- ---------------------------

我现在不确定这是加载顺序问题,反应性问题,发布/订阅问题还是它们的混合。我有这个片段

search(collection, where, id, part, callback){
  var result
  if(id){
    console.log(Meteor.users.find().fetch()) //[]
    result = Collections[collection].findOne(id)
  }else{
    result = Collections[collection].find(where ? where : {}, {many:true}).fetch()
  }
  if(result){
    if(callback){
      callback(result)
      return
    }else{
      if(part){
        return result[part]
      }else{
        return result
      }
    }
  }
}

我还注意到该日志的输出发生在我订阅之前。该文件位于/imports/scripts/tools.js

2 个答案:

答案 0 :(得分:1)

在自动运行块中,订阅“聊天”并检查处理程序是否准备就绪。然后找到并获取。

this.autorun(() => {
    let handler = Meteor.subscribe('chats');

    if(handler.ready()) {
         console.log(Chats.find().fetch())
    }
  });

答案 1 :(得分:1)

我意识到我没有在助手中使用反应式数据源,而是在调用tool.search函数时设置了一个Session变量,该函数只运行一次。