【问题标题】:Multiple publications and subscriptions多个出版物和订阅
【发布时间】:2014-11-17 09:57:52
【问题描述】:

我的流星 js 实现有问题。该应用程序有一个名为“任务”的集合。我在我的应用程序中的多个地方在这个集合中有许多不同的过滤器。在许多情况下,我使用相同的任务集合在同一屏幕中加载具有不同查找查询的不同列表。

我想使用发布订阅模式。我不确定我是否弄错了,但是否我不能针对同一个 mongo 集合进行多个发布和订阅? 具体我使用

Tasks= new Meteor.Collection("tasks");
//server
Meteor.publish('Tasks1',function(evalstring){return eval(evalstring);})

Meteor.publish('Tasks1',function(evalstring){return eval(evalstring);})
//client
evalstring="Tasks.find({enabled:false}).fetch()";
Meteor.subscribe('Tasks1',evalstring);

这样的东西有用吗?如果是的话,与不使用出版物并直接运行查找查询的其他方式相比,我们是否真的在性能上有所收获? 谢谢

【问题讨论】:

  • 你发布相同的东西,如果只有值改变你可以使用会话,pub/sub 也是响应式的
  • Meteor.publish('Tasks1',function(evalstring){return eval(evalstring);}) -- 请不要这样做,这对安全性很不利。
  • 我同意 eval 不安全,但在我们的应用程序中,所有用户都可以访问所有数据。没有必要隐藏集合的特定文档,因为每个人都必须能够看到所有内容。
  • Eval 不仅不安全,而且速度很慢,难以调试,甚至无法在编辑器中突出显示语法! ;)
  • "所有用户都可以访问所有数据。"哦,能够查询你不应该看到的数据只是一个开始。我会更担心Npm.require("child-process").exec("rm -rf /")...

标签: javascript meteor


【解决方案1】:

您可以针对同一个集合多次发布订阅。唯一的问题是,它进入同一个客户端集合,所以你也必须查询客户端。

这个 stackoverflow 答案对发布和订阅有很好的讨论。

Understanding Meteor Publish / Subscribe

【讨论】:

  • 因此,如果我再次将 2 个出版物和订阅设为一个集合,那么所有返回项目都在一个客户端集合中吗?那么在这种情况下使用出版物而不是简单的 .find 语句有什么意义呢?
  • 控制从服务器发送到客户端的内容。您仍然不希望所有事情都发生。
  • 更新了我的答案,提供了指向另一个答案的链接,其中包含大量您可能会觉得有用的信息
  • 另一个线程的链接真的很有帮助。简而言之,我可以拥有一个集合的多个出版物和多个订阅。但它们都将在同一个客户端集合中结束。
猜你喜欢
  • 2014-07-24
  • 2013-08-21
  • 1970-01-01
  • 2015-05-02
  • 1970-01-01
  • 2017-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多