Node.jsのスクリプトの基本を覚えよう (2/5)
作成:2013-04-13 10:36
更新:2013-04-13 10:49
更新:2013-04-13 10:49
■リクエスト処理用関数について
さて、http.Serverオブジェクトの作成・準備・待受開始までの流れは大体わかりました。残るは、「リクエストを受け取った時の処理」の内容でしょう。
先のサンプルでは、「doRequest」という関数を定義しておき、これをonメソッドで「request」イベントに組み込んでいました。このrequestイベントで実行される処理こそが、クライアントからのリクエストを処理するためのものでした。
この関数は以下のような形で定義されています。
request――第1引数は、「request」オブジェクトが渡されます。これの正体は、http.IncomingMessageというオブジェクトで、クライアントからのリクエストに関する機能がまとめられています。
response――第2引数は「response」オブジェクトが渡されます。これの正体は、http.serverResponseというオブジェクトで、サーバーからクライアントへ戻されるレスポンスに関する機能がまとめられています。
このrequestとresponseを使うことで、リクエストを受けた時の対処を作成していきます。ここでは、以下のような処理を行なっていますね。
・ヘッダー情報の書き出し
ここでは、{'Content-Type': 'text/plain'}という値が用意されていますね。これにより、Content-typeというヘッダー情報に「text/plain」という値を設定していることがわかります。これはレスポンスとして返送するコンテンツの種類を示すヘッダー情報で、これにより「このコンテンツは標準テキストである」ということがクライアントに伝えられます。
・コンテンツの書き出し
このwriteは、何度でも呼び出すことができます。これを呼び出して書きだしても、まだコンテンツは終了していませんので、どんどんwriteで追記していけます。
・コンテンツの完了
このendにより、レスポンス処理は終わり、そのリクエストの処理は完了します。「writeHead」「write」「end」の3つがあれば、クライアントへの返送内容は全部書けるのです。
先のサンプルでは、「doRequest」という関数を定義しておき、これをonメソッドで「request」イベントに組み込んでいました。このrequestイベントで実行される処理こそが、クライアントからのリクエストを処理するためのものでした。
この関数は以下のような形で定義されています。
function 関数名 ( req , res ){引数は2つのオブジェクトが渡されます。それぞれ以下のようなものです。
……必要な処理……
}
request――第1引数は、「request」オブジェクトが渡されます。これの正体は、http.IncomingMessageというオブジェクトで、クライアントからのリクエストに関する機能がまとめられています。
response――第2引数は「response」オブジェクトが渡されます。これの正体は、http.serverResponseというオブジェクトで、サーバーからクライアントへ戻されるレスポンスに関する機能がまとめられています。
このrequestとresponseを使うことで、リクエストを受けた時の対処を作成していきます。ここでは、以下のような処理を行なっていますね。
・ヘッダー情報の書き出し
res.writeHead(200, {'Content-Type': 'text/plain'});「writeHead」は、responseオブジェクトのメソッドで、ヘッダー情報をレスポンスに書き出すものです。第1引数にはステータスコードを指定し、第2引数にヘッダー情報を連想配列でまとめたものを指定します。
ここでは、{'Content-Type': 'text/plain'}という値が用意されていますね。これにより、Content-typeというヘッダー情報に「text/plain」という値を設定していることがわかります。これはレスポンスとして返送するコンテンツの種類を示すヘッダー情報で、これにより「このコンテンツは標準テキストである」ということがクライアントに伝えられます。
・コンテンツの書き出し
res.write('Hello World\n');HTTPでは、ヘッダー情報の後に、ボディ部分となるコンテンツが書きだされますが、このコンテンツの書き出しを行なっているのがresponseオブジェクトの「write」です。引数に指定した値がボディ部分のコンテンツとして書きだされます。
このwriteは、何度でも呼び出すことができます。これを呼び出して書きだしても、まだコンテンツは終了していませんので、どんどんwriteで追記していけます。
・コンテンツの完了
res.end();コンテンツの書き出しが完了したら、最後にresponseの「end」を呼び出してコンテンツ出力を完了します。ここではただendを呼び出しているだけですが、引数に書き出すコンテンツの値を指定することもできます。その場合には、引数の値を書きだした後にコンテンツを完了します。
このendにより、レスポンス処理は終わり、そのリクエストの処理は完了します。「writeHead」「write」「end」の3つがあれば、クライアントへの返送内容は全部書けるのです。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※前回作成のスクリプト var http = require('http'); var server = http.createServer(); server.on('request', doRequest); server.listen(1234); console.log('Server running!'); // リクエストの処理 function doRequest(req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.write('Hello World\n'); res.end(); }
※関連コンテンツ