2016-08-30 5 views
1
  1. Meteor.call() 메소드를 클라이언트 또는 서버 측 요청에만 사용하는 경우. 제발 조언
  2. 내 응용 프로그램에서 Meteor.users()는 콘솔에 모든 사용자를 표시합니다. 이 기능을 해제하는 방법.

답변

2
  1. 당신은 서버 측 메소드를 호출하는 클라이언트 측에서 Meteor.call()를 사용한다. 유성은 굉장합니다 documentation about methods.

  2. Meteor.users()가 클라이언트 측의 모든 사용자를 반환하면 서버가 모든 사용자 문서를 게시하고 있습니다. 설치 후 유성 autopublish package (meteor remove autopublish)을 제거 했습니까?

+0

나는 이미 모든 컬렉션을 게시하는 자동 게시를 제거했습니다. –

+0

사용자 컬렉션을 게시하는 다른 패키지가 없으면 패키지를 제거한 경우에는 그러지 않습니다. .meteor/versions 파일을 공유하고 Meteor.publish ('users')를 통해 사용자 컬렉션을 게시하는 서버 측 코드가 없는지 확인 하시겠습니까? – Matt

0

1 Meteor.call()는

Meteor.call() 전형적 클라이언트 측에서 서버 측의 메소드를 호출하는 데 사용된다. 그러나 서버 쪽에서 Meteor.call()을 사용하여 다른 서버 쪽 기능을 호출 할 수도 있지만 권장하지는 않습니다. 다음은

그래서 서버 호출 (모범 사례) 서버 호출에

  • 서버에 Meteor.call()

    • 클라이언트를 사용하는 두 가지 방법이 있습니다 (좋지 않아 연습,하지만 작동) 무슨 유성 docs 말하기에 :

      이 방법은에서 호출 할 수 있습니다 Meteor.call을 사용하는 라이언트 및 서버. 일부 코드 을 클라이언트에서 호출 할 수 있어야하는 경우에만 메소드를 사용해야합니다. 코드가 서버에서만 호출되도록 모듈화하려는 경우 메서드가 아닌 JavaScript 함수를 사용하십시오.

      2. 게시 및 구독

      이 당신의 데이터가 안전한지 확인하려면 autopublishinsecure 패키지를 제거해야합니다. 이렇게하면 콜렉션의 자동 발행이 사용 불가능하게되고 클라이언트에서 데이터베이스에 대한 자유 쓰기 액세스가 허용되지 않습니다.

      이제 컬렉션의 많은 부분을 필요한만큼만 게시하려면 발행물을 설정해야합니다 (또는 이미 설정되어있는 경우 검토해야합니다).

      Publications : 이것은 서버에서 클라이언트로 데이터베이스 콜렉션을 제공합니다.

      그것은,이 같이 보일 프로젝트 내부에 api 또는 server 폴더에 대한 보일 것이다

      , 위의 예에서 우리는 MongoDB의 통화에서 모든 필터 매개 변수를 제공하지 않은 사항 것을
      Meteor.publish('allUsers', function() { 
          if (!this.userId) { 
          return this.ready(); 
          } 
          return Meteor.users.find({}); 
      }); 
      

      , 따라서이 발행물은 데이터베이스의 모든 사용자를 갖는 커서를 반환합니다.

      Meteor.publish('currentUser', function() { 
          if (!this.userId) { 
          return this.ready(); 
          } 
          return Meteor.users.find({ 
          _id: this.userId 
          }); 
      }); 
      

      이제이 책에서, 우리는 필터로 사용자 _id 필드를 제공하고 있습니다. 따라서 현재 사용자 객체 만 사용 가능한 항목으로 갖는 Meteor.users()에 대한 커서가 반환됩니다.

      구독 :은이 같은 대응 클라이언트 측 코드에 가입을 호출해야합니다, 당신의 서적에 액세스하려면 :

      Meteor.subscribe('currentUser'); 
      

      당신이 동시에 allUsers에 가입하지이 있는지 확인 - - 여러 구독이 두 구독의 통합 집합을 제공하기 때문입니다. 그렇게하면 클라이언트 쪽 미니 문고에 currentUser + allUsers = allUsers이 생깁니다. 우리는 그것을 원하지 않는다.

      위의 내용을 확인한 후에 클라이언트 측 코드 (또는 콘솔)에 Meteor.users()을 사용하면 현재 로그인 한 사용자의 사용자 데이터 만 포함된다는 것을 알 수 있습니다.

      Publications and Subscriptions에 대한 자세한 내용은 공식 설명서를 참조하십시오.