【Node.js】httpモジュールでサーバーを作成する方法

この記事では『Node.jsに標準で含まれているhttpモジュール』について、

  • Node.jsとは
  • Node.jsのhttpモジュールを用いてサーバーを作成する方法

などを図を用いて分かりやすく説明するように心掛けています。ご参考になれば幸いです。

Node.jsとは

Node.jsとは

Node.jsは、JavaScriptをサーバーサイドで実行するためのランタイム環境です。Node.jsを用いると、クライアントサイドで実装するJavaScriptを、サーバーサイドでも使えるようになります。

Node.jsのhttpモジュールを用いてサーバーを作成する方法

Node.jsのhttpモジュールはHTTPサーバー(Webサーバーとも呼ばれる)を作成する上で必要な機能を提供するモジュールです。httpモジュールを用いると、サーバーを作成することができます。なお、httpモジュールはNode.jsに標準で含まれているモジュールなので、Node.jsがインストールされていれば利用できます。

HTTPサーバー(Webサーバー)とは

Webクライアント(Webブラウザ)からHTTPリクエストを受け取り、そのHTTPリクエストに対して、HTTPレスポンスの送信をしているのがHTTPサーバーです。

  • HTTPリクエスト
    • WebクライアントがHTTPサーバーにデータを要求すること
  • HTTPリスポンス
    • HTTPサーバーがHTTPリクエストに対してデータをWebクライアントに返送すること

以下に、httpモジュールを使ってHTTPサーバーを作成したサンプルコードを示します(後ほど、以下のサンプルコードについて詳しく説明します)。

サンプルコード

// httpモジュールの読み込み
const http = require('http');

// HTTPサーバーの作成
const server = http.createServer((request, response) => {
  // HTTPレスポンスのステータス行とメッセージヘッダの指定
  response.writeHead(200, {
    'Content-Type': 'text/html',
  });

  // HTTPレスポンスのメッセージボディの指定
  const responseMessage = '<h1>Hello, World!</h1>';
  response.end(responseMessage);
});

// HTTPサーバーを待機状態にする
const port = 8080;
server.listen(port);

ディレクトリ構成

httpTest
└─server.js  // HTTPサーバーを作成するコードを記述する                     

フォルダ名(httpTest)やファイル名(server.js)はなんでもOKです。デスクトップ上など任意の場所にフォルダを作成しましょう。

ではこれから、Node.jsのhttpモジュールを使って、HTTPサーバーを作成してみましょう。手順を以下に示します。

HTTPサーバーを作成する手順

  • httpモジュールを読み込む
  • HTTPサーバーを作成する
  • HTTPサーバーを待機状態にする
  • 作成したHTTPサーバーを起動する

httpモジュールを読み込む

以下のコードでは、httpモジュールを読み込んでいます。

// httpモジュールの読み込み
const http = require('http');

require('http')httpモジュールを読み込み、定数httpに格納しています。

HTTPサーバーを作成する

以下のコードではHTTPサーバーを作成しています。

// HTTPサーバーの作成
const server = http.createServer((request, response) => {
  // HTTPレスポンスのステータス行とメッセージヘッダの指定
  response.writeHead(200, {
    'Content-Type': 'text/html',
  });

  // HTTPレスポンスのメッセージボディの指定
  const responseMessage = '<h1>Hello, World!</h1>';
  response.end(responseMessage);
});

先ほど読み込んだhttpモジュールのcreateServerメソッドを実行すると、HTTPサーバーを作成することができます。createServerメソッドの引数には、リクエストを受け取った際に行う処理を関数で記述します。関数の第1引数requestと第2引数responseはそれぞれHTTPリクエストとHTTPレスポンスを示しています。

第1引数requestにはクライアントからのHTTPリクエストに関する機能を提供するオブジェクトが渡され、第2引数responseにはクライアントへのHTTPレスポンスに関する機能を提供するオブジェクトが渡されます。

HTTPレスポンスを実装する

以下のコードではHTTPレスポンスを実装しています。

// HTTPレスポンスのステータス行とメッセージヘッダの指定
response.writeHead(200, {
  'Content-Type': 'text/html',
});

// HTTPレスポンスのメッセージボディの指定
const responseMessage = '<h1>Hello, World!</h1>';
response.end(responseMessage);

HTTPレスポンスは以下の3要素で構成されます。

  • ステータス行、レスポンス行
    • 3桁の数字で構成され、リクエストの結果が入る
  • メッセージヘッダ、HTTPヘッダー、ヘッダーフィールド
    • 送信するデータの情報などの追加情報が入る
  • メッセージボディ、ボディ、メッセージ本体、エンティティボディ
    • リクエストに対する、サーバー応答内容の本文が入る

第2引数のresponseオブジェクトのwriteHeadメソッドの第1引数にはステータス行、第2引数にはメッセージヘッダを指定します。

上記のコードにおいて、ステータス行にはHTTPリクエストが成功した際に返す「ステータスコード200」を指定しています。また、メッセージヘッダには様々な情報を入れることができますが、今回はデータの種類を伝えるContent-Typeのみを指定しています。

ステータス行の詳細

ステータス行には、HTTPリクエストが成功したか失敗したかを表すデータ(ステータスコード)を入れます。ステータスコードは以下のように分類されます。

  • 情報レスポンス:100–199
  • 成功レスポンス:200–299
  • リダイレクトメッセージ:300–399
  • クライアントエラーレスポンス:400–499
  • サーバーエラーレスポンス:500–599

メッセージボディは第2引数のresponseオブジェクトのendメソッドの引数にはメッセージボディを指定します。

補足

endメソッドではなく、以下に示すようにwriteメソッドを用いても、メッセージボディを指定することができます。

const responseMessage = '<h1>Hello, World</h1>';
res.write(responseMessage);
res.end();

HTTPサーバーを待機状態にする

以下のコードではHTTPサーバーを待機状態にしています(HTTPサーバーは待機状態でないと通信することができません)。

const port = 8080;
server.listen(port);

createServerメソッドで作成オブジェクト(定数server)には、listenメソッドがあります。listenメソッドを用いると、サーバーを待機状態にすることができます。待機状態にするポート番号はlistenメソッドの引数で指定します。上記のコードではポート8080番を待機状態にしています。

作成したHTTPサーバーを起動する

server.jsが格納されているhttpServerディレクトリにコンソールで移動し、以下のコマンドを実行すると、サーバーを起動させることができます。

node server.js

作成したHTTPサーバーにHTTPリクエストを送るためのURLは以下のようになっています。

Chrome等のWebブラウザの画面上部のアドレスバーに「http://localhost:8080/」を入力し、enterを押すと、以下の画面が表示されます。

Node.jsのhttpモジュールを用いてサーバーを作成する方法

http://localhost:8080/」を入力してenterを押すと、作成したHTTPサーバーにHTTPリクエストが送られます。HTTPサーバーはHTTPレスポンスとして、「Hello, World!」を画面に表示するためのHTMLファイルを返しているため、画面上には「Hello, World!」が表示されています。

Node.jsで作成したHTTPサーバーにHTTPリクエストを送信し、実装どおり動作することが確認できました。

HTTPサーバーを停止するには、コンソールでctrl+cを押します。

本記事のまとめ

この記事では『Node.jsに標準で含まれているhttpモジュール』について、以下の内容を説明しました。

  • Node.jsとは
  • Node.jsのhttpモジュールを用いてサーバーを作成する方法

お読み頂きありがとうございました。