Node.jsのルート
私たちは、必要なURLの要求ルーティングおよびその他のGETとPOSTパラメータ、対応するコードを実行するための経路データに、これらの必要性を提供したいです。
したがって、我々は、HTTPリクエストを表示するURLを抽出し、/ POSTのパラメータ要求を取得する必要があります。 この関数は、(あるいはモジュール自体の関数としての)ルートまたはサーバーの一部であるべき探検本当に価値があるが、ここでは暫定的に私たちのHTTPサーバに予定されています。
私たちに必要なすべてのデータを要求オブジェクトに含まれている、コールバック関数のonRequestメソッドとしてオブジェクト()最初の引数が渡されます。 しかし、これらのデータを解決するために、我々は、URLとクエリ文字列モジュールである追加のNode.jsモジュールを必要とします。
url.parse(string).query | url.parse(string).pathname | | | | | ------ ------------------- http://localhost:8888/start?foo=bar&hello=world --- ----- | | | | querystring(string)["foo"] | | querystring(string)["hello"]
もちろん、我々はまた、POSTリクエストパラメータの本体を解析するためにクエリ文字列モジュールを使用することができ、我々は後にデモンストレーションを行います。
今、私たちは、URLパスのブラウザ要求を見つけるためにいくつかのロジックを追加するonRequestメソッド()関数に来て:
var http = require("http"); var url = require("url"); function start() { function onRequest(request, response) { var pathname = url.parse(request.url).pathname; console.log("Request for " + pathname + " received."); response.writeHead(200, {"Content-Type": "text/plain"}); response.write("Hello World"); response.end(); } http.createServer(onRequest).listen(8888); console.log("Server has started."); } exports.start = start;
さて、私たちのアプリケーションは異なる要求を区別するために要求されたURLパスすることができます - 私たちはURLパスに要求へのルート(まだ完了していない)を使用することを許可の基準ハンドラにマップされます。
私たちは/起動および/アップロードからの要求が処理するために異なるコードを使用することができることを意味し、アプリケーションを構築したいです。 その後私たちは一緒にこれらの要素を統合する方法について説明します。
今、私たちは、ルートを書き、router.jsという名前のファイルを作成し、以下を追加することができます。
function route(pathname) { console.log("About to route a request for " + pathname); } exports.route = route;
あなたが見ることができるように、このコードは何もしませんでしたが、今のところそれはする必要があります。 、過去に多くのロジックを追加しますのは、ルーティングおよびサーバーを統合する方法を見てみましょう。
私たちは、ルーティングサーバがあることを認識し、それらを効果的に使用する必要があります。 もちろん、私たちは、サーバーへの依存性にバインドされ、このようにハードコーディングすることができますが、他のプログラミング言語の経験が、それは非常に痛みを伴うことになるので、私たちは、依存性注入を使用し、比較的緩くルートを追加します私たちに語りましたモジュール。
まず、次のようにserver.jsファイルコードは、過去の引数としてルーティング機能するようにのは、サーバ起動()関数を拡張してみましょう
var http = require("http"); var url = require("url"); function start(route) { function onRequest(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(); } http.createServer(onRequest).listen(8888); console.log("Server has started."); } exports.start = start;
同時に、我々はそうルーティング機能は、サーバー内に注入することができ、それに応じてindex.js展開されます:
var server = require("./server"); var router = require("./router"); server.start(router.route);
ここでは、関数はまだ何もしていません渡します。
あなたは今(ノードindex.js、常にコマンドラインを覚えている)アプリケーションを起動し、URLを要求した場合、あなたは私たちのHTTPサーバがすでにルーティングモジュールを使用している、と要求することを示している、アプリケーションが出力情報に対応する表示されますパスがルートに渡されます。
$ node index.js Server has started.
出力は、より多くの迷惑/favicon.ico要求の関連部分の上に削除されました。
次のようにブラウザのアクセスhttp://127.0.0.1:8888/、出力結果は次のとおりです。