Node.jsを学ぶ(その2・Webサーバー作成の基本)

  • 投稿日:
  • by
  • カテゴリ:

Node.jsの主な使い道は、Webアプリケーションを作ることです。
今回は、その第一歩として、Node.jsのプログラムをWebサーバーとして動作させる際の基本を解説します。

1.httpモジュールを読み込む

Node.jsでは、プログラム自身をWebサーバーとして動作させることができます。
プログラムがメモリに常駐し、クライアントからのリクエストを直接に処理して、レスポンスを返します。

Webサーバーの機能を使うには、まず「http」というモジュールを読み込みます。
それには、「require」という関数を使い、以下のように書きます。
読み込んだモジュール(のオブジェクト)が変数に代入されます。

var http = require('http');

2.http.Serverクラスのオブジェクトを作成する

次に、「http.Server」というクラスのオブジェクトを作成します。
httpに対して「createServer」というメソッドを実行すると、http.Serverのオブジェクトを作成することができます。

var server = http.createServer(リスナー);

「リスナー」には、リクエストを処理する関数を指定します。
リスナーは後で作成します。

3.リクエストを待つ

次に、クライアントからのリクエストを待つ状態にします。
これは、http.Serverオブジェクトの「listen」というメソッドで行います。
listenメソッドの書き方はいくつかありますが、以下の書き方を使うことが多いと思います。

server.listen(ポート番号);

「ポート番号」には、リクエストを受信する際のポート番号を指定します。
HTTPの標準のポート番号は80番ですが、すでにApache等が80番を占有していることもありますので、今回は8080番を使うことにします。

4.リスナーを作る

次に、リクエストを処理する関数(リスナー)を作ります。
リスナーには、リクエストとレスポンスを処理するために、2つのパラメータが渡されます。

今回は、リクエストの情報は使わずに、単に「Hello, Node.js」というレスポンスを返すだけのリスナーを作ってみます。
レスポンスのオブジェクトには、レスポンスを関連のプロパティやメソッドがあります。
以下のプロパティとメソッドを使うことが多いと思います。

プロパティ/メソッド内容
statusCodeプロパティ送信するステータスコード(200や403など)
setHeaderメソッドレスポンスヘッダーを設定する
writeHeadメソッドステータスコード/レスポンスヘッダーをまとめて送信する
writeメソッドレスポンスを送信する
endメソッドレスポンスの送信を終了する

今取り上げている例だと、リスナーの関数を以下のようにします。

function listener(request, response) {
  response.statusCode = 200;
  response.setHeader('Content-type', 'text/plain');
  response.write('Hello, node.js');
  response.end();
}

また、statusCode/setHeaderの代わりにwriteHeadを使って、以下のようにしても良いです。

function listener(request, response) {
  response.writeHead(200, { 'Content-Type': 'text/plain' });
  response.write('Hello, node.js');
  response.end();
}

5.プログラムの完成

ここまでの話をまとめると、「Hello, Node.js」とレスンポンスを返すだけのプログラムは、以下のようになります。

var http = require('http');

var server = http.createServer(listener);
server.listen(8080);
console.log('Server start');

function listener(request, response) {
  response.statusCode = 200;
  response.setHeader('Content-type', 'text/plain');
  response.write('Hello, node.js');
  response.end();
}

上記のソースコードをテキストエディタで入力し、「hello.js」というファイル名で保存します。

なお、5行目の「console.log」は、ターミナルにメッセージを出力するメソッドです。

6.動作の確認

ターミナル等を起動してコマンド入力できる状態にし、hello.jsファイルがあるディレクトリをカレントディレクトリにします。
そして、「node hello.js」と入力して、プログラムを実行します。

実行すると、ターミナルに「Server start」と表示された後、待ち状態になります。
ここで、Webブラウザを起動して、「http://localhost:8080」のアドレスに接続します。
すると、Webブラウザに「Hello, Node.js」と表示されます。

Hello, Node.jsとレスポンスを返すWebサーバー

テストが終わったら、ターミナルでCtrl+Cキーを押してプログラムを終了します。