将发布功能从架构中分离出来并放入 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
此外,这可能看起来很复杂,但坚持下去,您很快就会明白!
我正在尝试更新我的应用程序以利用 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
此外,这可能看起来很复杂,但坚持下去,您很快就会明白!