【问题标题】:Meteor Collections Publish and SubscriptionsMeteor Collections 发布和订阅
【发布时间】:2017-11-30 20:30:44
【问题描述】:

今天有点卡住了,找了一堆相关的话题,还是没解决。我对 Meteor 有点陌生,可能没有以正确的方式进行操作,但自动发布已被删除。

我在与客户端/服务器共享的 lib/import 文件夹中将集合创建为 const。接下来,我在 Async 中调用服务器方法将数据插入到集合中。到目前为止一切顺利,我认为(我看到了 db mongo 中的数据)。

现在在 client.js 中,我想处理与用户相关的每个数据,然后将其附加到模板或做一些其他事情。

// 服务器

Meteor.publish("pipeline", function() {
    var data = pipeline.find({}, {fields: {userID:this.userID}}).fetch();
   
    return data;
});

// 客户

var loadCurrentPipeLineUser = Meteor.subscribe('pipeline');
var data = pipeline.findOne({userID: Meteor.userId()});
console.log(loadCurrentPipeLineUser);
console.log(data);

loadCurrentPipeLineUser 和 data 都返回未定义。 loadCurrentPipe 的输出(我认为这意味着未定义)是:

在服务器端,在发布内部,它会在控制台上打印所有内容。

【问题讨论】:

  • 是的,请查看@EvgenyKolyakov 提供的链接。您没有为您的客户端代码提供任何上下文,但如果您真的在订阅后立即执行 findOne(),那么您已经为自己创建了一个竞争条件。即它有时会“工作”,但大多数时候可能不会。

标签: javascript mongodb meteor


【解决方案1】:

在没有.fetch()的情况下发布它

Meteor.publish("pipeline", function() {
    return pipeline.find({}, {fields: {userID:this.userID}});
});

因为发布返回一个游标。

【讨论】:

  • 感谢您的回答,但它仍然给了我在客户端未定义的两个值
  • 你的pipeline = new Collection('pipeline');在服务器和客户端都可以读取的文件中吗?
  • 是的,还没有使用路由器尝试过该路径,如果今天无法解决此问题,可能会尝试一下。想知道并阅读 link 我定义 export const pipeline = new Mongo.Collection("pipeline");在我的 lib/import.js 上,我认为建议在服务器端创建一个“新”集合,然后在客户端订阅。
  • 嗯清理了 mongo 集合,并重新启动了流星,似乎正在使用相同的逻辑:/
  • this.userID 应该是 this.userId
猜你喜欢
  • 2016-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-29
  • 2013-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多