无法将MongoDB集合从服务器发布到客户端Meteor

时间:2017-03-29 21:00:17

标签: mongodb meteor collections publish publish-subscribe

我想将服务器端集合发布到客户端。

在服务器端

MedicalCenters = new Mongo.Collection('medicalCenters');

Meteor.publish('medicalCenters',function () {
    return MedicalCenters.find({});
});

我希望只有特定模板才能访问此集合。 Thefore,

在客户端

Template.doctor.onCreated(function () {
    Meteor.subscribe('medicalCenters');
});

现在我可以从客户端模板传递数据,甚至可以写入服务端集合。但似乎订阅无效,因此,我无法在模板中显示收集数据。 (该集合未显示在蒙古国的meteortoys中)

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

听起来您没有将集合定义代码放在客户端和服务器执行的公共位置。我正在做这个假设是因为你说集合本身在mongol中不可见。

请记住,为了使发布/订阅工作,集合必须存在于客户端(使用minimongo)和服务器端(使用mongodb)。

有关详细信息,请参阅Meteor Application Structure指南,但基本上您应将集合定义代码放在不在特殊目录(例如server/client/文件夹中的文件中)。这样做可确保代码由客户端和服务器执行(根据meteor api docs)。

  

特殊目录之外的所有JavaScript文件都在客户端和服务器上加载。

在较旧的流星时代(在我们拥有imports/文件夹之前),人们经常将其集合定义代码放在流星项目根目录下的lib/文件夹中。现在,它常见于here所述的import/api/目录中。

答案 1 :(得分:0)

尝试添加帮助程序以将数据发送到模板:

(defun pozpar3 (lst)
  (if (endp lst)
      '()
      (cons (car lst) (pozpar3 (cddr lst)))))

然后在您的模板中,您可以遍历医疗中心

Template.doctor.helpers({
  medicalcenters() {
    return MedicalCenters.find();
  }
});