遊んでNode.js(三)を回転します.

9656 ワード

遊んでNode.js(三)を回転します.
前節はNodejsのHTTPサービスに対して、より詳細な解析を行いました.またコードをモジュール化することもできました.モジュール化後、機能は個々のファイルにあり、コードの維持に有利です.続いて、私達はどのように異なったHTTPの要求を処理しますかを考えてみて、この処理の異なっているHTTPの要求の東、伝説の中のルートの選択です.
ルートの説
まず、私たちは、ルーティングのために要求されたURLと他の必要なGETおよびPOSTパラメータを提供し、その後、ルーティングはこれらのデータに基づいて対応するコードを実行する必要があることを明確に知る必要がある. 
したがって、HTTP要求を確認して、要求のURLとGET/POSTパラメータを抽出する必要がある.この機能はルートに属しますか?それともサーバーに属しますか?(モジュール自体の機能としても)確かに検討する価値がありますが、ここではとりあえずHTTPサーバの機能です.
必要なすべてのデータはrequestオブジェクトに含まれ,このオブジェクトはオンレクェスト関数の最初のパラメータ伝達として機能します.しかし、これらのデータを解析するためには、追加のNode.JSモジュールが必要です.それぞれurlとquerystringモジュールです.以下の図はデータの解析過程をよく説明します.
                      url.parse(string).query
                                           |
           url.parse(string).pathname      |
                       |                   |
                       |                   |
                     ------ -------------------
http://localhost:8888/start?foo=bar&hello=world
                                ---       -----
                                 |          |
                                 |          |
              querystring(string)["foo"]    |
                                            |
                         querystring(string)["hello"]
 もちろん,我々はまた,querystringモジュールを用いてPOST要求体におけるパラメータを解析することもできる.
Just Do It
ここでは、Onerequest()関数にいくつかのロジックを加えて、ブラウザが要求するURLのパスを探します.
 1 var http = require("http");
 2 var url = require("url");
 3 
 4 function start() {
 5   function onRequest(request, response) {
 6     var pathname = url.parse(request.url).pathname;
 7     console.log("Request for " + pathname + " received.");
 8     response.writeHead(200, {"Content-Type": "text/plain"});
 9     response.write("Hello World");
10     response.end();
11   }
12 
13   http.createServer(onRequest).listen(8888);
14   console.log("Server has started.");
15 }
16 
17 exports.start = start;  
はい、私たちのアプリケーションは、要求されたURLパスを通じて異なる要求を区別することができます.これにより、私たちは経路(未完成)を使用して、要求をURLパスを基準に処理プログラムにマッピングすることができます.
私たちが構築するアプリケーションでは、これは/startからの要求と/uploadからの要求が異なるコードで処理されることを意味しています.後でこれらの内容がどのように統合されているかを見ます.
ルートを作成しに来ました.router.jsというファイルを作成して、以下の内容を追加します.
1 function route(pathname) {
2   console.log("About to route a request for " + pathname);
3 }
4 
5 exports.route = route;  
あなたが見たように、このコードは何もしていませんが、今は当たり前です.もっと多くのロジックを追加する前に、どうやってルートとサーバーを統合するかを確認します.
私達のサーバーはルートの存在を知って有効に利用するべきです.もちろん、ハードコードでこの依存項をサーバに結びつけることができますが、他の言語のプログラミング経験から、これは非常につらいことだと教えられています.したがって、私たちは注入に依存する方法を使って、より緩やかにルートモジュールを追加します.
まず、サーバのstart()関数を拡張して、ルート関数をパラメータとして渡すようにします.
 1 var http = require("http");
 2 var url = require("url");
 3 
 4 function start(route) {
 5   function onRequest(request, response) {
 6     var pathname = url.parse(request.url).pathname;
 7     console.log("Request for " + pathname + " received.");
 8 
 9     route(pathname);
10 
11     response.writeHead(200, {"Content-Type": "text/plain"});
12     response.write("Hello World");
13     response.end();
14   }
15 
16   http.createServer(onRequest).listen(8888);
17   console.log("Server has started.");
18 }
19 
20 exports.start = start;
同時に、それに応じてindex.jsを拡張して、ルーティング関数をサーバに注入することができます.
var server = require("./server");
var router = require("./router");

server.start(router.route);
ここでは私たちが伝達する関数はまだ何もしていません.
今アプリケーションを起動したら(node index.js、このコマンドラインをずっと覚えています)、その後一つのURLを要求したら、アプリケーションが対応する情報を出力するのを見ます.これは私達のHTTPサーバがすでにルートモジュールを使っています.そして要求された経路をルートに伝達します.はい、このルート部分はこれで終わります.コードを実行して出力を見てください.
  
 
PS:このブログは転送を歓迎しますが、ブログの住所と作者を明記してください.本人のレベルが限られていますので、間違いがあれば、ご指摘ください.ありがとうございます.
ブログアドレス:マーティンフォース注入依存大作
ブログの住所:http://www.cnblogs.com/voidy/
<.)≦