복붙노트

[MONGODB] 유성이 게시 이해 / 구독

MONGODB

유성이 게시 이해 / 구독

나는 프로젝트의 목록을 보여줍니다 최대 간단한 응용 프로그램 세트를 가지고있다. 나는 클라이언트에 모든 것을 전송하고 있지 않다 그래서 나는 autopublish 패키지를 제거했습니다.

 <template name="projectsIndex">    
   {{#each projects}}      
     {{name}}
   {{/each}}
 </template>

autopublish이 설정되었을 때,이 모든 프로젝트를 표시합니다 :

if Meteor.isClient
  Template.projectsIndex.projects = Projects.find()

그것을 제거와, 내가 추가 할 필요가 :

 if Meteor.isServer
   Meteor.publish "projects", ->
     Projects.find()
 if Meteor.isClient
   Meteor.subscribe "projects"
   Template.projectsIndex.projects = Projects.find()

그래서, 클라이언트 측 발견 () 메서드는 서버 측에서 게시 된 기록을 검색 말을 정확합니까? 난 단지 ()를 한 번 찾기를 호출해야처럼 내가 생각 때문에 나를 트립 됐어요.

해결법

  1. ==============================

    1.컬렉션, 게시 및 구독이 설명서에는 종종 용어를 혼란에 의해 증폭 얻을 자주 혼동을 피하기 위해 그렇게로서,보다 상세하게 논의 할 수, 유성의 까다로운 영역입니다.

    컬렉션, 게시 및 구독이 설명서에는 종종 용어를 혼란에 의해 증폭 얻을 자주 혼동을 피하기 위해 그렇게로서,보다 상세하게 논의 할 수, 유성의 까다로운 영역입니다.

    다음의 사샤 그레이프 (DiscoverMeteor의 공동 저자) 하나의 슬라이드에 게시 및 구독을 설명 :

    당신이 전화 찾기 (에 필요한 이유를 한 번 이상) 이해 제대로하려면 컬렉션, 게시 및 구독이 유성에서 작동하는 방법을 이해할 필요가있다 :

    이 유성이 일을 매우 편리하게 어디 : 클라이언트에 Minimongo 컬렉션 기록 (문서)을 수정할 때, 유성 즉시 연관된 모든 템플릿을 업데이트 할 것입니다, 또한, 다시 서버에 변경 사항을 보낼 것이다 차례 MongoDB의에서 변경 사항을 저장하고 해당 문서를 포함하여 기록 세트에 가입 한 해당 클라이언트에게 전송합니다. 이것은 지연 보상이라고하며 유성의 일곱 핵심 원칙 중 하나입니다.

    당신은 자신의 _id를 기반으로, 서버에 동일한 수집에서 온 경우 다른 기록에 끌어 오기는하지만, 모든 클라이언트에서 동일한 컬렉션 오게 구독 무리가있을 수 있습니다. 이것은 유성 문서로 명확하게 설명하지만, 암시되지 않습니다

    대부분의 시간이다 - 어떤 설명하지 것은 명시 적으로 추가, 변경 및 제거, 또는 전혀 핸들러를 게시 사용하지 않을 때 발생하는 것입니다. 이 가장 일반적인 경우, 수집 인수는 (당연히) 1 단계에서 서버에 선언 된 MongoDB를 수집의 이름에서 가져온 그러나이 의미하는 것은 서로 다른 이름을 가진 다른 게시 및 구독을 가질 수 있으며, 모든 기록은 클라이언트에서 동일한 컬렉션 종료됩니다. 에서 문서를 나란히하고 클라이언트에서 클라이언트 작업 측에 다른 최상위 필드를 발송 기능을 게시 - 톱 레벨의 필드의 수준까지, 유성 구독이 겹칠 수 있도록 문서 사이에 일련의 조합을 수행 할을 담당 컬렉션 필드의 두 세트의 조합이 될 것입니다.

    당신은 당신이 다른 일을하더라도, 서버와 클라이언트 모두에서 같은 방법을 정의하라의 블로그 게시물 수집을 가지고 :

    BlogPosts = new Mongo.Collection('posts');
    

    클라이언트에서 블로그 게시물은 기록에서 얻을 수 있습니다 :

    이러한 모든 문서는 서버에 블로그 게시물의 컬렉션을 통해 MongoDB의의 게시물 수집에서오고, 클라이언트의 블로그 게시물 컬렉션 끝.

    지금 당신은 () 두 번 이상 호출 찾아야 왜 우리가 이해할 수 - 두 번째는 클라이언트에있는 모든 구독 문서가 동일한 컬렉션 끝날 것이기 때문에, 당신은 당신이에 대한 관심 만 가져올 필요가있다. 예를 들어, 클라이언트의 가장 최근의 게시물을 얻으려면, 당신은 단순히 서버에서 쿼리를 거울 :

    var recentPosts = BlogPosts.find({}, {sort: {date: -1}, limit: 10});
    

    이것은 클라이언트가 지금까지받은 것을 모든 문서 / 기록에 상단의 게시물과 사용자의 게시물을 모두 커서를 반환합니다. (감사 제프리).

  2. ==============================

    2.예, 클라이언트 측 발견은 ()는 Minimongo의 클라이언트에있는 문서를 반환합니다. 문서에서 :

    예, 클라이언트 측 발견은 ()는 Minimongo의 클라이언트에있는 문서를 반환합니다. 문서에서 :

    당신이 말하는 것처럼, 클라이언트가있을 것이다 문서 () 지정을 게시 할 수 있습니다.

  3. ==============================

    3.여기에 기본 엄지 손가락의 규칙은 게시 및 가입 변수 이름은 클라이언트와 서버 측에서 동일해야합니다.

    여기에 기본 엄지 손가락의 규칙은 게시 및 가입 변수 이름은 클라이언트와 서버 측에서 동일해야합니다.

    MongoDB를 클라이언트 측에서 컬렉션 이름은 동일해야합니다.

    내가 게시 사용하고 있다고 가정하고 코드의 모습 내 컬렉션라는 이름의 직원에 대한 가입

    여기에 var 키워드의 사용은 (이 파일 컬렉션 현지하려면이 키워드를 사용) 선택 사항입니다.

    CollectionNameOnServerSide = new Mongo.Collection('employees');   
    
    Meteor.publish('employeesPubSub', function() { 
        return CollectionNameOnServerSide.find({});     
    });
    
    CollectionNameOnClientSide = new Mongo.Collection('employees');
    var employeesData = Meteor.subscribe('employeesPubSub');
    
    Template.templateName.helpers({
      'subcribedDataNotAvailable' : function(){
            return !employeesData.ready();
        },
       'employeeNumbers' : () =>{
           CollectionNameOnClientSide.find({'empId':1});
      }
    });
    

    여기에서 우리는 데이터를 클라이언트 측에서 준비가되어있는 경우 데이터가 다음 도우미 방법 employeeNumbers를 사용하여 직원 번호를 인쇄 할 준비가되었는지 알고 subcribedDataNotAvailable 헬퍼 방법을 사용할 수 있습니다.

    <TEMPLATE name="templateName">
    {{#if subcribedDataNotAvailable}}
       <h1> data loading ... </h1>
     {{else}}
      {{#each employeeNumbers }}
         {{this}}
      {{/each}}
     {{/if}}
    <TEMPLATE>
    
  4. ==============================

    4.

    // on the server
    Meteor.publish('posts', function() {
    
        return Posts.find();
    
    });
    
    // on the client
    Meteor.subscribe('posts');
    
  5. from https://stackoverflow.com/questions/19826804/understanding-meteor-publish-subscribe by cc-by-sa and MIT license