流星鉄ルーターサーバー側フック
-
21-12-2019 - |
質問
鉄ルータの使用そのようなフックを追加することは可能です。
// 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-フック
しかし、ドキュメンテーションは、これらのフック「サーバーサイド」の作り方を決して言わない。
アイデアは、公開されているものをより管理したい1つまたは2つの特定のルートを除いて、すべてのルートの公開コレクションを監督するフックを作成することです。
解決
鉄ルータはクライアントとサーバー上の両方で同じで、クライアントとサーバーの両方で利用可能なディレクトリ/ファイルで宣言を実行できます。
デフォルトでは、宣言されたルートはクライアント用です。ルートをサーバー側にする場合は、where: 'server'
を含めることで明示的に宣言します。
ルートの定義とルータの設定は、サーバーとクライアントとほぼ同じです。デフォルトでは、ルートはクライアントルートとして作成されます。このようなルートにWHEREプロパティを提供することで、ルートがサーバーを対象としていることを指定できます。
Router.map(function () {
this.route('serverRoute', {
where: 'server',
action: function () {
// some special server side properties are available here
}
});
});
.
コントローラ上ではなく、Router.Mapに配置する必要がある場合に注意してください。
サーバーのアクション機能(RouteControllers)には、さまざまなプロパティとメソッドがあります。すなわち、サーバにはまだレンダリングはありません。そのため、レンダリングメソッドは利用できません。また、サブスクリプションを待機することも、サーバー上のWAITメソッドを呼び出すことはできません。サーバールートConnectリクエストのBare要求、応答、および次のプロパティ、およびクライアントと同じように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');
}
});
});
.
あなたが見るように、命名規則は1つだけです、それ故あなたはこのようなものを述べることができます:
Router.before(someFilter, {only: ['clientRoute1', 'clientRoute2', 'serverRoute1']});
.
または
Router.before(someOtherFilter, {except: ['clientRoute3', 'clientRoute4', 'serverRoute2']});
.
あなたが通常どおりです。