【NodeJS】先端ルートの運転機構を分析する
3985 ワード
一、ルータ
ルータコンポーネントは、フロントエンドがルーティングの変化を監視し、応答するためのツールです.これにより、より少ないバックエンドサーバに依存してURIを解析し、対応するコンテンツを返すことができる.現在も多くのサイトでこの方法が使われていますが、この方法は応用を構築する際にいくつかの欠点があります.
最も主要な問題は、ユーザーインターフェースが移植可能であることを望むことである.つまりバックエンドはどんな技術で開発されていても、先端アプリケーションは正常に配置され、作業されています.私達はバックエンドのURIのためにページを組み立てるのではないので、バックエンドにルートを解析させる必要がないです.
二、ルートの変化にどう応えるか
通常は二つの方法があります.最初の方法は、ルーティングを宣言し、調整関数を結合することである.もちろんルートが多い時はこの方法はあまり理想的ではないです.第二の方法は、ルーティングがアクティブになるとイベントをトリガすることである.これは、イベントがルートと直接的に結合されることなく、いくつかのコンポーネントによってこれらのイベントを傍受することを意味する.この方法はルートが多いときに非常に有用である.ルータがこれらのコンポーネントに対して何も知らないため、ルートだけを知っています.
三、ルートを実現する方法
JavaScriptでルートを実現するには二つの方法があります.第一に、hashベースのURIを利用して、これらのURIは菗文字で始まるので、この方法はより一般的です.もう一つの一般的ではない方法は、ブラウザのhistory APIを利用して、より多くの伝統的なURIを生成することであり、Webアプリケーションでよく見られるURIである.この技術はもっと複雑で、最近やっと十分なブラウザサポートを得てこの方法を実現します.
四、依存注入でばらばらにルートモジュールを追加する
私達のサーバーはルートの存在を知って有効に利用するべきです.もちろん、この依存項はハードコードによってサーバに結び付けられますが、他の言語のプログラミング経験から、これは非常につらいことになると教えられています.したがって、私たちは注入に依存する方法を使って、より緩やかにルートモジュールを追加します.
五、構造の面でどうやってルートを設計しますか?
アーキテクチャの面でルーティングについて考慮する必要があるのは、グローバル単一ルートを設計するか、それともモジュールごとにルーティングまたは他のコンポーネントを設計したいということである.
グローバル単一ルーティングの問題は、機能とルーティングが絶えず増加すると、アプリケーションはますます大きくなり、ますます拡張しにくくなります.その利点は、すべてのルーティングが同じ場所にあると宣言し、単一のルーティングはまた、すべてのコンポーネントが傍受できるイベントをトリガすることができる.
第二の態様では、各モジュールはルータの実例を持っている.例えば、応用の中に5つのコンポーネントがあれば、それぞれのコンポーネントは自分のルータを持っています.このような利点は、モジュールごとに自己が含まれており、利用者は対応するルートを探す必要がない.さらに、このスキームでは、ルート定義と応答関数の間の結合がより緊密であり、コードがより簡潔であることを意味する.このスキームの欠点は、ルーティングステートメントが各モジュールに分散されており、集中的に保存されていないことである.
ルータコンポーネントは、フロントエンドがルーティングの変化を監視し、応答するためのツールです.これにより、より少ないバックエンドサーバに依存してURIを解析し、対応するコンテンツを返すことができる.現在も多くのサイトでこの方法が使われていますが、この方法は応用を構築する際にいくつかの欠点があります.
最も主要な問題は、ユーザーインターフェースが移植可能であることを望むことである.つまりバックエンドはどんな技術で開発されていても、先端アプリケーションは正常に配置され、作業されています.私達はバックエンドのURIのためにページを組み立てるのではないので、バックエンドにルートを解析させる必要がないです.
二、ルートの変化にどう応えるか
通常は二つの方法があります.最初の方法は、ルーティングを宣言し、調整関数を結合することである.もちろんルートが多い時はこの方法はあまり理想的ではないです.第二の方法は、ルーティングがアクティブになるとイベントをトリガすることである.これは、イベントがルートと直接的に結合されることなく、いくつかのコンポーネントによってこれらのイベントを傍受することを意味する.この方法はルートが多いときに非常に有用である.ルータがこれらのコンポーネントに対して何も知らないため、ルートだけを知っています.
三、ルートを実現する方法
JavaScriptでルートを実現するには二つの方法があります.第一に、hashベースのURIを利用して、これらのURIは菗文字で始まるので、この方法はより一般的です.もう一つの一般的ではない方法は、ブラウザのhistory APIを利用して、より多くの伝統的なURIを生成することであり、Webアプリケーションでよく見られるURIである.この技術はもっと複雑で、最近やっと十分なブラウザサポートを得てこの方法を実現します.
四、依存注入でばらばらにルートモジュールを追加する
私達のサーバーはルートの存在を知って有効に利用するべきです.もちろん、この依存項はハードコードによってサーバに結び付けられますが、他の言語のプログラミング経験から、これは非常につらいことになると教えられています.したがって、私たちは注入に依存する方法を使って、より緩やかにルートモジュールを追加します.
// file server.js
var http = require("http");
var url = require("url");
function start(route) {
http.createServer(function (request, response) {
var pathname = url.parse(request.url).pathname;
console.log("Request for " + pathname + " received.");
route(pathname);
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}).listen(8888);
console.log("Server has started.");
}
exports.start = start;
// file router.js
function route(pathname) {
console.log("About to route a request for " + pathname);
}
exports.route = route;
// file index.js
var server = require("./server");
var router = require("./router");
server.start(router.route); //
/* : A C , B ,B XML :“ A , C ”。
, A , C 。 C A , C A , ,A C , B, 。 */
注:以上のserver.js、router.js、index.jsの3つのファイルは同じレベルのディレクトリにあります.五、構造の面でどうやってルートを設計しますか?
アーキテクチャの面でルーティングについて考慮する必要があるのは、グローバル単一ルートを設計するか、それともモジュールごとにルーティングまたは他のコンポーネントを設計したいということである.
グローバル単一ルーティングの問題は、機能とルーティングが絶えず増加すると、アプリケーションはますます大きくなり、ますます拡張しにくくなります.その利点は、すべてのルーティングが同じ場所にあると宣言し、単一のルーティングはまた、すべてのコンポーネントが傍受できるイベントをトリガすることができる.
第二の態様では、各モジュールはルータの実例を持っている.例えば、応用の中に5つのコンポーネントがあれば、それぞれのコンポーネントは自分のルータを持っています.このような利点は、モジュールごとに自己が含まれており、利用者は対応するルートを探す必要がない.さらに、このスキームでは、ルート定義と応答関数の間の結合がより緊密であり、コードがより簡潔であることを意味する.このスキームの欠点は、ルーティングステートメントが各モジュールに分散されており、集中的に保存されていないことである.