【问题标题】:Sharing collections between client and server and private server methods在客户端和服务器以及私有服务器方法之间共享集合
【发布时间】:2015-02-21 20:14:19
【问题描述】:

我有不应该从客户端看到/调用的方法。调用这些私有“辅助”方法的唯一方法是通过服务器上的 Meteor 方法声明。

我尝试过这样做,但由于某种原因,我无法共享我的集合定义,即使它们位于 lib 文件夹中

lib/collections/tabs.js

Tabs = new Mongo.Collection('tabs');

服务器/lib/collections/tabs.js

_.extend(Tabs, {
  /* Increments download count
   */
  incrementDownloadsCount: function(tabId) {
    Tabs.update({_id: tabId}, { $inc: { downloads: 1 } }, function(error, result) {
      if (error) { throw new Meteor.Error(error.mesage); }
    });
  }

});

知道这是为什么,以及这是否是私有服务器方法的正确方法?

非常感谢

【问题讨论】:

    标签: meteor


    【解决方案1】:

    我不完全清楚,你的问题是什么。

    • 如果你想对客户端隐藏集合,你应该使用 Meteor.methods() 就像http://docs.meteor.com/#/basic/Meteor-methods 中描述的那样。这将导致在服务器上调用逻辑,而不允许客户端直接操作集合
    • 如果你想与服务器和客户端共享集合,你的方法是正确的,将集合定义放在一个文件中,例如在 lib 文件夹中。
    • 如果您想与服务器和客户端共享集合并且不希望客户端可以操纵集合,则必须删除流星不安全包并分别使用 Collection.allow 或 Collection.deny 来控制允许的内容情况见这里:http://docs.meteor.com/#/basic/Mongo-Collection-allow

    希望这有助于找到方向。

    【讨论】:

    • 我不希望客户端能够调用/查看辅助方法。因为我通过扩展集合来定义辅助方法,所以我需要在服务器和客户端上都可以访问它。但问题是,即使我在 lib 文件夹中定义了集合,但在服务器上引用它时出现未定义错误
    • @Tarlen 你想通过扩展集合而不是使用推荐的Meteor.methods() 方法来实现什么?
    • Meteor.methods 可以从客户端调用,我不想要这个。通过在服务器上声明这些方法,在流星方法之外,它们基本上变成了私有的。此外,我只是将集合扩展为结构化/命名空间代码的一种方式。
    猜你喜欢
    • 2015-08-07
    • 2021-03-10
    • 1970-01-01
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    相关资源
    最近更新 更多