Publish/subscribe 未在 Blaze 模板中加载

Publish/subscribe not loading in Blaze template

在我实现 publish/subscribe 之前,我的代码工作正常。我关注了 the basic tutorial and checked the source code 并且我没有做任何不同的事情。一切都构建并运行,但 MongoDB 中的任何内容都不会显示在 Blaze 模板中。

imports/api/features.js

if (Meteor.isServer) {
   Meteor.publish('features', function featuresPublication() {
      return Features.find({});
   });
   Meteor.publish('comments', function commentsPublication() {
      return Features.find({}, {fields: {comments: 0}});
   })
};

client/main.js

Template.body.onCreated(function bodyOnCreated() {
  Meteor.subscribe('features'); 
});

client/main.html

<body>
  <h1 id="title">Feature Requests</h1>
  {{#if currentUser}}
    <button class="ui green button create" id="create">Add a New     Feature Request</button>
    {{> requestForm}}
    {{#each features}}
      {{> feature}}
    {{/each}}
  {{else}}
    {{> loginButtons}}
  {{/if}}
</body>

编辑#1

在我 运行 meteor remove autopublish 之前,我的代码看起来像这样并且有效:

Template.body.helpers({ 
  features() {
    return Features.find({}, {sort: {createdAt: -1}});
  },
  comments() {
    return Features.find({}, {fields: {comments: 0}}); 
  },
});

编辑 #2

感谢所有提供答案的人。我从根本上误解了 publish/subscribe 的工作原理。我没有意识到订阅后我还需要打电话给return Features.find({})。这是我的工作代码:

import { Features } from '../imports/api/features.js';

import '../imports/api/features.js'

Template.body.onCreated(function bodyOnCreated() {
  Meteor.subscribe('features'); 
});

Template.body.helpers({
  features: function() {
    return Features.find({});
  }
});

试试这个:

Template.body.onCreated(function() {
  const self = this;
  self.autorun(() => {
    self.subscribe('features');
  });
});

另请参阅 https://guide.meteor.com/data-loading.html#organizing-subscriptions

忽略第一个答案。缺少 autorun 是首先引起我注意的,但由于您没有将任何参数传递给 subscribe,因此不需要。

我的下一个问题是:在 client/main.html 中,对 features 的引用来自哪里? Template.body 上有 features 助手吗?如果没有,您需要添加它:

Template.body.helpers({
  features: function() {
    return Features.find({});
  }
});

另外,参见

我看到您正在使用导入目录。您是否记得将您的发布文件导入 server/main.js 文件?

server/main:

import 'imports/path/to/publications.js'