Node.jsとは?
- JavaScript(以下JS)でサーバ・バックエンド実装が行えるJS実行環境
- JSをWebブラウザの中でなく単独で実行できる
- JSベースだからフロントエンド経験者からの参入障壁が低い
1行でWebサーバを構築
Node.js自体の詳細やインストール方法等は他記事を検索いただくとして、
ここでは「1行でWebサーバを構築」するプログラム例をご紹介します!
Node.jsインストール後にJSファイルを一つ作成し(仮に”server.js”とする)、
以下のコードを入力します。
require('http').createServer(function(request,response){response.end("TEST");}).listen(3000);
これが「1行Webサーバ」になります。
上記ファイルの配置ディレクトリで以下のコマンドを実行します。
node server.js
Webブラウザを開き下記のアドレスにアクセスすれば”TEST”という文字列が表示されるはずです。
http://localhost:3000/
テキストを表示するだけの簡単なプログラムですが、「ブラウザからアクセスするとテキストを送り返す」というサーバ機能を非常に短いプログラムで実現しており画期的です!
以下はJSコードの仕組みを噛み砕いていきます👇
「1行Webサーバ」の仕組み
コードを1行で書きましたが短くするための書き方なので、
解説用に分解して書き換えると以下のようになります。
const http = require('http'); // …①
var server = http.createServer(
function(request,response){
response.end("TEST");
}
); // …②
server.listen(3000); // …③
①インターネットアクセスをするhttpオブジェクトを読み込む:
Node.jsのAPIモジュールとしてhttpオブジェクトというものがあります。
名前の通りでHTTPプロトコルを取り扱えるようになります。
requireメソッドはNode.jsのAPIモジュールを呼び出すことができます。
まとめると、httpオブジェクトを呼び出して定数httpに設定をしていることになります。
②httpからサーバオブジェクトを作る:
httpオブジェクトにあるcreateServerメソッドを利用しています。
このメソッドは関数を引数に取り(後述)、Node.jsのサーバとなるhttp.Serverオブジェクトを作成します。
createServerメソッド中の関数ですが、引数を二つ渡しています。
引数requestはクライアントからサーバへ送られる情報を管理するオブジェクトで、
引数responseはサーバからクライアントへ送られる情報を管理するオブジェクトです。
サーバプログラムではこの二つの情報の行き来を考慮することが必須となります。
そして、responseオブジェクトのendメソッドでクライアントへの返信を終了します。引数にテキストを用意するとその内容を出力して終了します。
まとめると、誰かがブラウザでアクセスしてきたら必ず”TEST”という文字列を返すサーバを作ったことになります。
③サーバオブジェクトを待ち受け状態にする:
待ち受けとはサーバにクライアントがアクセスしてくるのを待ち続けている状態を指します。
http.Serverオブジェクトのlistenメソッドは引数で指定した数値を待ち受けポート番号として設定します。これによりhttp://localhost:3000/ というアドレスに②の処理を反映できます。
まとめると、ここでWebページのアドレスを決定することになります。
まとめ
Node.jsによるWebサーバ構築の流れは:
①インターネットアクセスをするhttpオブジェクトを読み込む
②httpからサーバオブジェクトを作る
③サーバオブジェクトを待ち受け状態にする
これらの処理をコンパクトなコードで表現できちゃうんです。
そう、Node.jsならね!