문제

Iron 라우터를 사용하면 다음과 같은 후크를 추가할 수 있습니다.

// this hook will run on almost all routes
Router.before(mustBeSignedIn, {except: ['login', 'signup', 'forgotPassword']});

// this hook will only run on certain routes
Router.before(mustBeAdmin, {only: ['adminDashboard', 'adminUsers', 'adminUsersEdit']});

보다: https://github.com/EventedMind/iron-router#using-hooks

그러나 문서에는 이러한 후크를 "서버 측"으로 만드는 방법이 나와 있지 않습니다.

아이디어는 게시된 항목에 대해 더 많은 제어를 원하는 하나 또는 두 개의 특정 경로를 제외하고 모든 경로에 대한 컬렉션 게시를 감독하는 후크를 만드는 것입니다.

도움이 되었습니까?

해결책

Iron Router는 클라이언트와 서버 모두에서 동일하며 클라이언트와 서버 모두에서 사용할 수 있는 디렉터리/파일에서 선언을 수행할 수 있습니다.

기본적으로 선언된 경로는 클라이언트용입니다.경로를 서버측으로 지정하려면 다음을 포함하여 명시적으로 선언합니다. where: 'server'.

에서 가져온 공식 문서:

경로를 정의하고 라우터를 구성하는 것은 서버와 클라이언트에서 거의 동일합니다.기본적으로 경로는 클라이언트 경로로 생성됩니다.다음과 같이 경로에 where 속성을 제공하여 경로가 서버용으로 지정되도록 지정할 수 있습니다.

Router.map(function () {
  this.route('serverRoute', {
    where: 'server',

    action: function () {
      // some special server side properties are available here
    }
  });
});

위치는 컨트롤러가 아닌 Router.map에 배치되어야 합니다.

서버 작업 함수(RouteController)에는 다양한 속성과 메서드를 사용할 수 있습니다.즉, 아직 서버에 렌더링이 없습니다.따라서 렌더링 방법을 사용할 수 없습니다.또한 waitOn 구독을 하거나 서버에서 대기 메서드를 호출할 수 없습니다.서버 경로는 클라이언트에서와 마찬가지로 기본 요청, 응답 및 Connect 요청의 다음 속성은 물론 params 개체도 가져옵니다.

Router.map(function () {
  this.route('serverFile', {
    where: 'server',
    path: '/files/:filename',

    action: function () {
      var filename = this.params.filename;

      this.response.writeHead(200, {'Content-Type': 'text/html'});
      this.response.end('hello from server');
    }
  });
});

보시다시피 명명 규칙은 하나만 있으므로 다음과 같이 말할 수 있습니다.

Router.before(someFilter, {only: ['clientRoute1', 'clientRoute2', 'serverRoute1']});

또는

Router.before(someOtherFilter, {except: ['clientRoute3', 'clientRoute4', 'serverRoute2']});

평소처럼.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top