javascript - 我应该为每个集合使用一个发布还是多个?

标签 javascript meteor meteor-publications

我正在开发用户组系统。每个组都有几个功能,我希望使与组集合的交互尽可能安全和简单,因为它仍处于早期阶段。

现在,我的网站中有一个组部分,我在其中使用多个嵌套页面。该部分的目的是允许用户加入组、请求成员资格(如果该组是私有(private)的)、浏览一个组对象等。

例如,在我的组部分中,我可以在产量中加载“查看所有组”页面、“创建新组”页面或“仅查看我的组”(我所属的组)或“查看群组”以获取群组详细信息。

我的第一种方法是为每个子页面创建一个 controller.js 文件,该文件调用针对子页面需求量身定制的订阅。例如,我有一个用于“查看所有组”子页面的“all_group”发布/订阅,以及一个用于“仅查看我的组”子页面的“my_groups”发布/订阅。

但这变得非常困惑。此外,我在两个文件夹中声明了我的“组”集合,因此我不确定客户端可用的数据来自何处。

现在我解释了情况,这是我的问题:

  • 当我在客户端上执行 console.table(Groups.find().fetch()); 时,我看到不应该存在的字段(即我当前的出版物或未返回的字段)任何其他)。这是因为我在客户端声明了“组”集合吗?如何解决这个问题?
  • 我是否应该删除所有这些出版物并仅创建一份包含允许客户查看的所有内容的出版物?然后,我将从组部分页面 Controller 订阅它并使用一组数据。
  • 我是否应该简单地使用允许/拒绝规则阻止客户端的任何插入/更新/删除,并仅使用方法进行这些操作?
  • 将我的方法放在 both 文件夹中是否安全/建议这样做,这样我就不会失去延迟补偿功能?

编辑 好吧,我吓坏了,因为我的所有收集数据都在客户端,但这只是发布中的一个错误查询(我同时使用了 field:1field:0 预测)。 还有两个问题:

  1. 如果我使用方法,我假设我不必拒绝 native 驱动程序中的所有内容,我只需比方法允许的限制更严格,对吗?
  2. 如果我将我的方法放在两个文件夹中,它将在客户端和服务器上执行,因此在“客户端离线”上下文中,即使客户端弄乱了我的方法,如果客户端结果与他的不同(假设无法使用允许-拒绝规则完成更改)?即使使用这些方法,我也会有延迟补偿吗?

最佳答案

为了更好地控制和可视化您的订阅,您可以使用 msavin:mongol .

从性能 Angular 来看,创建一个包罗万象的出版物并不是一个好主意(将所有数据发送给所有客户对于所有相关人员来说都是一种痛苦)。

如果您使用方法并删除了自动发布,那么是的,一切都会被拒绝......除了用户自己的个人资料上的更新。您可能也想手动拒绝。

对于方法和收集规则,您应该共享验证代码。这样,客户端和服务器以相同的方式进行验证(并且应该始终得出相同的结果),因此除非您的客户端搞砸了控制台,否则应该不会出现问题,并且应该保留滞后补偿。
如果您的服务器方法做了客户端不应该知道的事情,您还可以在服务器上和客户端上定义一次该方法。效果相同。

关于javascript - 我应该为每个集合使用一个发布还是多个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30680436/

相关文章:

javascript - 如何在 Javascript 中使用正则表达式来截取 URL 的一部分而不指定固定长度?

meteor - 如何告诉 meteor 到 "watch"数组的变化?

javascript - meteor 自动成型 : form with id "asdf" needs either "schema" or "collection" attribute

meteor - 基于登录用户的 "role"在 Meteor 中的动态发布

asp.net - ASP.NET 应用程序中的浏览器缓存

javascript - 如何在 React 组件的返回函数中使用 IIFE?

javascript - 在上一次调用中执行同一函数后,如何在 1 秒内多次调用函数? (javascript)

javascript - 分离客户端和服务器代码的文件夹后的发布/订阅

meteor - 在发送到客户端之前修改 Meteor.publish 中的数据