2017-02-15 5 views
0

Meteorsの提案するファイル構造を利用するためにアプリケーションを更新しようとしていますが、スキーマファイルから公開機能を分離できません。私が使用しようとしているファイル構造は私たちのスキーマとserver/publications.jsを別々に公開する

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'); 
    }); 
}); 

答えて

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

また、これは複雑なように見えるが、それに固執し、あなたはすぐにそれを理解するだろうこと!

+0

ありがとうございました。私は間違いなくそのツタンを読むでしょう! – bp123

+0

問題ありません。私の答えはあなたのために働いたのですか? – Sean

+0

はい。私は必要なファイルがたくさんあります。あなたはそれを指摘しました。助けてくれてありがとう。 – bp123