我试图更新我的应用程序以利用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');
});
});
答案 0 :(得分:1)
如果您导入集合&确保将您的出版物导入您的服务器:
路径:/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
此外,这可能看起来很复杂,但坚持下去,你很快就能理解它!