gpt4 book ai didi

javascript - meteor 集合不更新客户端上的订阅

转载 作者:可可西里 更新时间:2023-11-01 02:51:19 26 4
gpt4 key购买 nike

我对 Meteor 和 Mongo 很陌生,即使我不想要它,我也需要一些关系。

我有一个名为 Feeds 的集合和另一个名为 UserFeeds 的集合,其中我有一个 feedid 和一个 userid,我像这样在服务器上发布用户提要:

Meteor.publish('feeds', function(){
return Feeds.find({_id:{$in:_.pluck(UserFeeds.find({user:this.userId}).fetch(),'feedid')}});
});

我在 UserFeeds 上找到用户,获取它(返回一个数组)并提取它只有 feedid 字段,然后在 Feeds 集合中找到那些提要。

然后像这样订阅客户端:

Deps.autorun(function(){
Meteor.subscribe("feeds");
});

问题是,当我添加新提要和新用户提要时,客户端不会收到更改,但当我刷新页面时,新提要会出现。

知道我在这里遗漏了什么吗?

谢谢。

最佳答案

我也遇到过。事实证明,服务器上的发布函数不会 react 性地重新运行:如果它们返回一个 Collection 游标,就像您正在做的那样(和大多数发布函数一样),那么发布函数将运行一次并且 Meteor 将存储游标并仅在光标内容发生变化时才发送更新。这里重要的是 Meteor 不会重新运行发布函数,因此,Collection.find(query),当query 变化。如果您希望发布函数重新运行,那么到目前为止我采用的方法是设置发布函数以接收参数。这样,其集合确实响应式更新的客户端可以响应式地重新订阅。代码看起来像这样:

// client
Meteor.subscribe('user_feeds');

Deps.autorun(function(){
var allFeeds = UserFeeds.find({user: Meteor.userId()}).fetch();
var feedIds = _.pluck(allFeeds,'feedid');
Meteor.subscribe('feeds',feedids);
});

// server
Meteor.publish('feeds',function(feedids) {
return Feeds.find({_id: {$in: feedids}});
});

我信陨石包publish-with-relations就是为了解决这个问题,虽然我没用过。

编辑:我相信发布功能在 userId 更改时重新运行,这意味着您可以进行服务器端检查以确保用户在发布敏感数据之前已登录。

关于javascript - meteor 集合不更新客户端上的订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15680461/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com