Node.jsのインストールからNode.jsのモジュールを使いWebサーバサンプルを作成します。
1.Node.jsとは
Node.jsはサーバサイドでJavaScriptを実行できるようにするプラットフォーム。
特徴
・シングルスレッドにおける非同期処理を容易に実装可能にしたイベント駆動型プログラミング環境。
・サーバーへの接続台数が10,000台を超えると表示が遅くなるというC10K問題はノンブロッキングI/Oで発生しない。
2.本稿の実行環境
(1)ホストOS
Windows 10 Pro
(2)仮想環境(VirtualBox)
・ゲストOS:CentOs8(Red Hat 64-bit)
3.Nodeのインストール
(1)EPEL リポジトリ情報をインストールする
# yum -y install epel-release
(注1)epel-release
![](https://region-sys.com/wp-content/uploads/2021/10/image-79.png)
(注1)
EPEL(Enterprise Linux用の追加パッケージ)は、Fedoraチームによるオープンソースの無料のコミュニティベースのリポジトリプロジェクト。Fedoraは、レッドハットが支援するコミュニティー。
(2)Node.jsのインストールとバージョン確認
# yum -y install nodejs
# node -v
![](https://region-sys.com/wp-content/uploads/2021/10/image-80.png)
(3)npmのインストールとアップデート
# yum -y install npm
# npm update -g npm
(注)npm
npm(Node Package Manager)はNode.jsのパッケージを管理するツールで、npmのパッケージには、
・Node.jsのMVCフレームワークである”Express”
・非同期処理を実装するための”promise”、”async”
・双方向のリアルタイムアプリケーションが実装できる”Socket.io”
などがある。
3.Node.jsによるWebサーバサンプル(1)
responseオブジェクトのwrite()メソッドでコンテンツを書き出す。
(1)プログラムの作成
node-sample1.js
1 2 3 4 5 6 7 8 9 10 11 |
const http = require('http'); const server=http.createServer(); server.on('request',doRequest); server.listen(8000); console.log('Server running!'); function doRequest(req,res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.write('Hello World\n'); res.end(); } |
(解説)
・require()でhttpモジュール(オブジェクト)を呼び出す
・createServer()でhttp.serverサーバオブジェクトを作成する。
・on()メソッドでサーバオブジェクトにイベントを組み込む。第一引数にイベント名、第2引数に組み込む処理(関数)を指定する。
・listen()メソッドでポート番号などを指定
・consoleオブジェトのlog()イベントでコンソールにメッセージを出力する。
・requestイベントで実行される処理をdoRequest()関数に定義する。
第一引数には”request”オブジェクト、第二引数には”response”オブジェクトが渡される。
writeHead()は、responseオブジェクトのメソッドで
ヘッダー情報をレスポンスに書き出すもので、第1引数にステータスコードを指定し、第2引数にヘッダー情報を連想配列でまとめたものを指定する。
{‘Content-Type’: ‘text/plain’}でコンテンツが標準テキストであることをクライアントに伝える。
write()は、responseオブジェクトのメソッドで引数に指定した値がボディ部分のコンテンツとして書き出される。
end()はresponseオブジェクトのメソッドでコンテンツの出力を完了する。引数に値を指定したときは値を書きだした後にコンテンツを完了する。
(2)サーバの起動
# node node-sample1.js
(3)仮想マシンのブラウザで確認
http://127.0.0.1:8000/
![](https://region-sys.com/wp-content/uploads/2021/10/image-81.png)
(4)別の端末から呼び出す
[root@localhost ~]# curl http://127.0.0.1:8000/
Hello World
![](https://region-sys.com/wp-content/uploads/2021/10/image-82.png)
(5)無名関数による書き方
前記(1)を無名関数に書き換える
node-sample12.js
1 2 3 4 5 6 7 |
const http = require('http'); http.createServer(function (requ,res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.write('Hello World\n'); res.end(); }).listen(8000); console.log('Server running!'); |
4.Node.jsによるWebサーバサンプル(2)
3.項ではResponseオブジェクトのwrite()メソッドでコンテンツを書き出したが、本項ではhtmlファイルをコンテンツとする。
(1)プログラムの作成
node-sample13.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
const http = require('http'); const fs= require('fs'); const server=http.createServer(); server.on('request',doRequest); server.listen(8000); console.log('Server running!'); function doRequest(req,res) { fs.readFile('./node-sample3.html', 'UTF-8', function(err, data){ res.writeHead(200, {'Content-Type': 'text/html'}); res.write(data); res.end(); }); } |
(解説)
・require()でfsモジュール(オブジェクト)を呼び出す
・fsオブジェクトのreadFile()メソッドでは、第1引数に読み込むファイルのパスを指定、第2引数にエンコード名、第3引数に読み込み完了後のコールバック関数を指定。
・コールバック関数の第1引数はエラーが発生した場合のエラーメッセージ、第2引数dataに読み込まれたテキストが保管され、write()メソッドで書き出す。
node-sample13.html
1 2 3 4 5 6 7 8 9 10 11 |
<!DOCTYPE html> <html lang="ja"> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>node-sample</title> </head> <body> <p>Node.jsのnode-sample3のページ</p> </body> </html> |
(2)サーバの起動
# node node-sample13.js
(3)仮想マシンのブラウザで確認
http://127.0.0.1:8000/
![](https://region-sys.com/wp-content/uploads/2021/10/image-83.png)
The end