Javascript 流星中的观测者/钩子

Javascript 流星中的观测者/钩子,javascript,node.js,mongodb,meteor,Javascript,Node.js,Mongodb,Meteor,我有一些通过ID与其他人相关的收藏 例如,我有收藏Post和Comments。我想显示每个帖子的评论数。因此,我在Post中有一个名为numComments的字段。每次插入或删除具有相同postId的注释时,我都可以用一种方法更新此编号,但我将使用一些挂钩/观察者来确保编号始终更新 因此,我创建了一个包含内容的文件server/observators.js Comments.find().observe({ added: function(document) { Posts.upda

我有一些通过ID与其他人相关的收藏

例如,我有收藏
Post
Comments
。我想显示每个帖子的评论数。因此,我在
Post
中有一个名为
numComments
的字段。每次插入或删除具有相同
postId
的注释时,我都可以用一种方法更新此编号,但我将使用一些挂钩/观察者来确保编号始终更新

因此,我创建了一个包含内容的文件
server/observators.js

Comments.find().observe({
  added: function(document) {
    Posts.update({ postId: document.postId }, { $inc: { numComments: 1 } });
  },
  changed: function(document) {
  },
  removed: function(document) {
    Posts.update({ postId: document.postId }, { $inc: { numComments: -1 } });
  },
});
我喜欢这种解决方案,但这是一种好方法吗

我的问题是,自从我实现了这个功能后,控制台窗口会打印出大量错误/警告。我怀疑这是因为观察员

在文档()中,它说:

observe返回一个实时查询句柄,该句柄是一个带有stop方法的对象。不带参数调用stop以停止调用回调函数并终止查询。查询将永远运行,直到调用此(..)

我不知道这意味着什么,但我认为应该手动停止观察者。

。它可能会引导您走向正确的方向,因为示例与您想要的非常相似。您不需要在集合中使用专用字段来获得评论的反应性计数,您可以在发布功能中构建它

我不知道这意味着什么,但我认为观察员应该这样做 手动停止

你说得对。在上面链接的示例中,查询被包装在
句柄
变量中。注意

self.onStop(function () {
  handle.stop();
});

它允许您确保停止发布后,不会有任何观察者仍在运行。

有什么错误?@Morten您不想在需要挂钩时使用观察者。请看答案。