SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

レスポンスを処理する

 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

次のページ
URLの解析

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
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本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト statemachine(statemachine)

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6580 2012/05/30 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング