Meteor Iron Router 서버 측 후크
-
21-12-2019 - |
문제
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']});
평소처럼.