【问题标题】:Cannot publish a MongoDB collection from the server to client Meteor无法将 MongoDB 集合从服务器发布到客户端 Meteor
【发布时间】:2017-08-23 13:34:06
【问题描述】:

我想向客户端发布一个服务器端集合。

在服务器端

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

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

我希望这个集合只能由特定模板访问。因此,

在客户端

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

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

我该如何解决这个问题?

【问题讨论】:

  • 你使用什么文件结构?您使用的是/imports 目录吗?另外,您是否有一个助手可以在模板中显示来自订阅的信息?
  • 我不使用 /imports,我使用自定义文件结构。如何在助手中引用集合? (以什么名义)

标签: mongodb meteor collections publish publish-subscribe


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 非常感谢。我将集合定义放在根文件夹中,现在它显示在蒙古语中。
【解决方案2】:

尝试添加帮助器将数据发送到模板:

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

然后在您的模板中,您可以循环访问医疗中心

<template name="doctor">
    {{#each medicalcenters}}
        {{name}}
    {{/each}}
</template>

【讨论】:

    猜你喜欢
    • 2015-04-28
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多