MeteorJS发布和订阅

时间:2016-04-15 07:41:20

标签: meteor

如果你有数以千计的数据,订阅所有数据可能会花费大量的时间和压力在服务器上;但是有时候我们无法避免它。

例如:

我有一个仪表板,我需要提供所有用户数据才能查找。

我无法在发布时限制它,因为我无法正确搜索用户集合。

有没有一种方法可以推荐(一个软件包或一个进程)能够以更快的方式订阅大量数据并减轻服务器压力?谢谢

1 个答案:

答案 0 :(得分:1)

这不是您原来问题的答案,但我正在添加流程以使用流星方法而非出版物(无反应性)。

对于以下示例,假设具有大量记录的集合是“UserPosts”

//on server side
Meteor.methods({
    getUserPosts: function (userId) {
       return UserPosts.find({ userId: userId });
    }
});

//on client side
Template.yourTemplate.onCreated(function () {
    Session.set("current-user-posts", []);
    var template = this;
    template.autorun(function () {
        var userId = Meteor.userId(); //Instead of this, add your reactive data source. That is, this autorun will run whenever Meteor.userId() changes, so change it according to your needs.
        Meteor.call("getUserPosts", function (err, result) {
            if (err) console.log("There is an error while getting user posts..");
            result = err ? [] : result;
            Session.set("current-user-posts", result);
        });
    });
});

Template.yourTemplate.helpers({
    userPosts: function () {
        return Session.get("current-user-posts");
    }
});

Template.yourTemplate.onDestroyed(function () {
    Session.set("current-user-posts", null);
});

现在,您可以在模板助手和其他位置使用Session.get("current-user-posts")来获取用户帖子。