ダウンロード サンプルファイル (2.8 KB)
レスポンスを処理する
HTTPサーバのレスポンスを返すには、http.ServerResponseオブジェクトを操作します。http.ServerResponseオブジェクトは、requestイベントの第2引数として渡されます。リスト2は、レスポンス処理の抜粋です。
var listener = function(request, response) {
// URLの振り分け
if(request.url == '/') {
//(1)レスポンスヘッダの送信
response.writeHead(200, {'Content-Type': 'text/plain;charset=utf-8'});
//(2)レスポンスボディの送信
response.write('Hello World\n');
response.write('こんにちは世界\n');
//(3)レスポンス処理の完了
response.end();
} else {
//(4)エラーページの表示
response.writeHead(404, {'Content-Type': 'text/plain;charset=utf-8'});
response.end('ページが見つかりません。');
}
};
処理の流れを説明します。
(1)、(4)のwriteHeadメソッドはレスポンスヘッダを送信します。endメソッドが呼び出される前に1回だけ呼び出す必要があります。この例では、「'/'」にアクセスした場合は、「200 OK」を返却し、それ以外では「404 Not Found」を返しています。第2引数には返却するヘッダ情報を設定しています。
(2)writeメソッドは、レスポンスボディの送信を行います。複数回呼び出して構いません。
(3)、(4)のendメソッドは、レスポンス処理が完了したことをサーバに通知します。(3)のように引数なしで呼び出したり、(4)のように同時にレスポンスボディを付加することもできます。
他にもいくつかメソッドは存在しますが、今回紹介したものを下表にまとめました。
Internet Explorerの場合、リスト2のエラーページが正しく表示されない場合があります。これは、インターネットオプションの「エラーメッセージの簡易表示」がオンになっているためです。これををオフにするためには、[ツール]-[インターネットオプション]-[詳細設定]から該当設定をオフにしてください。
| メソッド名 | 概要 |
| writeHead(statusCode, [reasonPhrase], [headers]) | HTTPステータスstatusCode、レスポンスヘッダheadersを送信します。このメソッドは、endメソッドが呼び出される前に、1回だけ呼び出す必要があります。リスト2の例では、第2引数のreasonPhraseを省略し、headersを指定しています |
| write(chunk, [encoding]) | レスポンスボディchunkを送信します。複数回呼び出しても構いません(encodingのデフォルトはUTF-8) |
| end([chunk], [encoding]) | レスポンスのヘッダとボディが送信完了したことをサーバに通知します。このメソッドを呼び出すことによってサーバ側のメッセージ処理は完了します(encodingのデフォルトはUTF-8) |
リクエストを処理する
クライアントからのリクエスト情報は、responseイベントの第1引数で渡されるhttp.ServerRequestオブジェクトを参照します。さまざまな情報が格納されますが、代表的なプロパティを下表にまとめました。
| プロパティ名 | 概要 |
| method | リクエストのメソッドを表す文字列。クライアントの要求によってGET/PUT/POST/DELETEなどの文字列が格納されます |
| url | リクエストURLを表す文字列 |
| headers | リクエストのヘッダー情報を表すオブジェクト |
| httpVersion | HTTPのプロトコルバージョンを表す文字列(例:1.1など) |
実際に確認するため、リクエスト情報を表示してみましょう(リスト3)。
// util モジュールの読み込み
var util = require('util');
...
var listener = function(request, response) {
// レスポンスプロパティの表示
response.writeHead(200, {'Content-Type': 'text/plain'});
response.write(util.format('method : %s\n', request.method));
response.write(util.format('url : %s\n', request.url));
response.write(util.format('headers : %j\n', request.headers));
response.write(util.format('version : %s\n', request.httpVersion));
response.end();
};
リスト3を実行した結果です。プロパティに情報が格納されているかどうかが確認できます(リスト4)。
method : GET
url : /
headers : {"accept":"text/html, application/xhtml+xml, */*",
"accept-language":"ja-JP","user-agent":"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)",
"accept-encoding":"gzip, deflate",
"host":"127.0.0.1:8124",
"connection":"Keep-Alive"}
version : 1.1
この記事は参考になりましたか?
- Windows Azure新機能チュートリアル連載記事一覧
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト statemachine(statemachine)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
