【问题标题】:How to get cursor by subscription id?如何通过订阅 ID 获取光标?
【发布时间】:2016-01-08 19:10:36
【问题描述】:

如何通过订阅 ID 指定特定游标?

我有 2 个订阅从同一个集合返回游标,但选择器/修饰符不同

我的用例示例 我有一个模板用户侧边栏,模板订阅了用户集合,只返回当前用户

此用户恰好在 HR 中,希望查看 QA 部门的所有用户,另一个模板,按 QA 部门从用户集合中过滤

我现在遇到的问题是,通过在客户端执行 .find(),它会显示所有 QA 用户 + HR 中的当前用户。

似乎从同一个集合返回的 2 个游标合并在一起,即使我有 2 个不同的订阅 ID,也无法区分。

有没有一种方法或解决方法可以让我在特定订阅返回的特定游标中指定所有值?

如果一个模板无法访问另一个模板返回的光标,如何使同级模板订阅单独工作?

编辑:添加
在我的用例中,我不会停止侧边栏订阅,因为我希望两个模板并排显示

我对过滤客户端光标有所保留:
1) 在客户端和服务器端重复相同的 mongo 选择器和修饰符对象似乎违反了 Dont-Repeat-Yourself (DRY) 准则,对我来说不是完全优雅的解决方案

2) 假设我的集合中有一个秘密字段,我从光标中省略了它,在客户端重复 mongo 修饰符意味着检查客户端代码将揭示秘密字段的存在

【问题讨论】:

    标签: javascript meteor


    【解决方案1】:

    这实际上是 Meteor 的一个特性,而不是一个 bug。对同一集合的多个订阅是联合的。正常模式是始终包含您的查询参数,而不是仅仅假设.find({}) 将产生过滤数据集。另一种常见的模式是在离开路由时停止当前订阅。

    【讨论】:

    • 在我的用例中,我不会停止侧边栏订阅,因为我希望两个模板并排出现,而不是我对您的建议的保留是:1)重复相同的 mongo 选择器和修饰符客户端和服务器端的对象似乎都违反了 Dont-Repeat-Yourself (DRY) 准则,对我来说并不是完全优雅的解决方案 2) 说我的集合中有一个秘密字段,我从光标中省略了该字段,重复客户端的 mongo 修饰符意味着检查客户端代码将揭示秘密字段的存在
    • 您可以通过将您的find() 放入/lib 中的函数中,紧跟this strategy,从而使您的代码脱水。停止订阅不是一种选择,因为您同时显示来自同一集合的两个视图。任何进入控制台并输入Collection.findOne() 的人始终可以找到秘密字段,您不会通过在客户端上省略密钥来欺骗任何人。
    猜你喜欢
    • 2019-10-20
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    • 2017-11-22
    • 2018-03-28
    相关资源
    最近更新 更多