CodeZine(コードジン)

特集ページ一覧

Windows AzureユーザーのためのNode.js HTTPモジュールの基礎

Windows Azure 新機能チュートリアル(14)

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2012/05/30 14:00
目次

レスポンスを処理する

 HTTPサーバのレスポンスを返すには、http.ServerResponseオブジェクトを操作します。http.ServerResponseオブジェクトは、requestイベントの第2引数として渡されます。リスト2は、レスポンス処理の抜粋です。

[リスト2]レスポンス処理(sample2.js)
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について

 Internet Explorerの場合、リスト2のエラーページが正しく表示されない場合があります。これは、インターネットオプションの「エラーメッセージの簡易表示」がオンになっているためです。これををオフにするためには、[ツール]-[インターネットオプション]-[詳細設定]から該当設定をオフにしてください。

http.SeverResponseクラスの主なメソッド
メソッド名 概要
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オブジェクトを参照します。さまざまな情報が格納されますが、代表的なプロパティを下表にまとめました。

http.ServerRequestクラスの代表的なプロパティ
プロパティ名 概要
method リクエストのメソッドを表す文字列。クライアントの要求によってGET/PUT/POST/DELETEなどの文字列が格納されます
url リクエストURLを表す文字列
headers リクエストのヘッダー情報を表すオブジェクト
httpVersion HTTPのプロトコルバージョンを表す文字列(例:1.1など)

 実際に確認するため、リクエスト情報を表示してみましょう(リスト3)。

[リスト3]レスポンス処理(sample3.js)
// 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)。

[リスト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

  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:Windows Azure新機能チュートリアル

もっと読む

著者プロフィール

  • WINGSプロジェクト statemachine(statemachine)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5