【问题标题】:Meteor client synchronous server database callsMeteor 客户端同步服务器数据库调用
【发布时间】:2013-02-20 19:08:37
【问题描述】:

我正在 Meteor 中构建一个依赖于数据库实时更新的应用程序。 Meteor 列出示例的方式是将数据库调用置于模板调用之下。我发现在处理中等大小的数据集时,这变得不切实际。我正在尝试将请求移至服务器,并将结果传递回客户端。

我在 SA 上查看了 similar questions,但没有立即找到答案。

这是我的服务器端函数:

    Meteor.methods({
    "getTest" : function() {
                   var res = Data.find({}, { sort : { time : -1 }, limit : 10 });
                   var r = res.fetch();
                   return (r);
                }
    });

和客户端:

    Template.matches._matches = function() {
        var res= {};
        Meteor.call("getTest", function (error, result) {
            res = result;
        });
        return res;
    }

我已经尝试过上述代码的变体——以回调函数返回为例。据我所知,有一个回调使函数异步,所以它不能被调用 onload(同步)并且必须从客户端调用。

我想通过服务器端的所有数据库查询来减轻前端负载。这在 Meteor 中可行吗?

谢谢

【问题讨论】:

    标签: node.js mongodb meteor


    【解决方案1】:

    这样做的方法是使用订阅而不是远程方法调用。请参阅文档中的 counts-by-room example。因此,对于每个数据库调用,您都有一个仅存在于客户端的集合。然后服务器使用setunset 决定集合中的记录。

    【讨论】:

    • 我已经将数据拆分为集合,不会这样做:console.log("Current room has " + Counts.findOne().count + " messages.");仍然把负载放在客户端?据我所知,这与我目前正在做的事情是一样的,我想摆脱它。
    • 它确实调用了本地数据库,但是 Counts 集合只包含一行,所以非常快。只有当所有数据都在客户端时,使用客户端集合才会很慢。使用Meteor.publish 限制客户端的数据可以解决此问题。
    • 我明白了。因此,我将尝试通过为我希望运行的每个查询(每页)收集一个集合来解决这个问题。听起来它会工作得很好。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    相关资源
    最近更新 更多