この記事では『Node.jsに標準で含まれているhttpモジュール』について、
- Node.jsとは
- Node.jsの
http
モジュールを用いてサーバーを作成する方法
などを図を用いて分かりやすく説明するように心掛けています。ご参考になれば幸いです。
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を押すと、以下の画面が表示されます。
「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
モジュールを用いてサーバーを作成する方法
お読み頂きありがとうございました。