将发布功能从架构中分离出来并放入 server/publications.js

Seperate publish function our of schema and into server/publications.js

我正在尝试更新我的应用程序以利用 Meteors 建议的文件结构,但我无法将发布功能与模式文件分开。我尝试使用的文件结构是

imports/
  api/
    profile/                     
      server/
        publications.js
      Profile.js  

当我将发布功能合并到 Profile.js 模式文件中时,发布功能起作用并且数据流向客户端,但是当我将它们分开时我无法发布。有人可以告诉我如何正确分离发布功能和架构。

路径:imports/api/profile/Profile.js

import { Mongo } from 'meteor/mongo';
import { SimpleSchema } from 'meteor/aldeed:simple-schema';
import { AddressSchema } from '../../api/profile/AddressSchema.js';
import { ContactNumberSchema } from '../../api/profile/ContactNumberSchema.js';

export const Profile = new Mongo.Collection("profile");

Profile.allow({
  insert: function(userId, doc) {
    return !!userId;
  },
  update: function(userId, doc) {
    return !!userId;
  },
  remove: function(userId, doc) {
    return !!userId;
  }
});

var Schemas = {};

Schemas.Profile = new SimpleSchema({
  userId: {
    type: String,
    optional: true
  },
  firstName: {
    type: String,
    optional: false,
  },
  familyName: {
    type: String,
    optional: false
  }
});

Profile.attachSchema(Schemas.Profile);

if (Meteor.isServer) {
  Meteor.publish('private.profile', function() {
    return Profile.find({});
  });
}

路径:client/main.js

Template.main.onCreated(function() {
    this.autorun(() => {
        this.subscribe('private.profile');
    });
});

如果您导入集合并确保您的出版物正在导入到您的服务器,这应该有效:

路径:/imports/api/profile/server/publications.js

import { Profile } from '/imports/api/profile/profile';

Meteor.publish('private.profile', function() {
    return Profile.find({});
});

您需要确保您也将出版物文件导入服务器。除非将 /imports 目录中的文件导入到服务器,否则不会加载它们。我们这样做的方法是将我们所有的出版物和方法等导入我们的 /imports/startup/server 目录中的一个文件,然后我们将该文件导入到实际的流星服务器。

因此您需要在 /imports/startup/server/index.js 文件中导入出版物

路径:/imports/startup/server/index.js

import '/imports/api/profile/server/publications';

最后你需要确保你的 startup/server/index.js 被导入到服务器

路径:/server/main.js

import '/imports/startup/server';

如果这让您感到困惑,我建议您阅读 TheMeteorChef 关于导入目录的精彩文章:https://themeteorchef.com/tutorials/understanding-the-imports-directory

此外,这可能看起来很复杂,但坚持下去,您很快就会明白!