Node.jsとExpressで簡易Webサーバーを作ってみる
どうもフロントエンドエンジニアのoreoです。
サーバーサイドのJavaScript実行環境であるNode.jsとそのフレームワークであるExpressを使って、簡単なWebサーバーを作成しました!
1 前準備
1-1 Node.jsのインストール
👇からインストールします。
1-2 プロジェクトディレクトリの作成
任意のディレクトリを作成し、そのディレクトリ内で、npm init
を実行します。いろいろと質問されますが、スキップしたい場合は、npm init -y
とします。ここでの質問内容を元にpackage.json
が作成されます。
1-3 Expressのインストール
npm install express --save
を実行します。save
オプションを付けるとインストールしたExpressのバージョン情報が、packge.json
に記載されます。
2 GetリクエストでJSONを取得する
2-1 ファイル作成
以下のようなapp.js
を作成します。
//expressモジュールの読み込み
const express = require('express')
//expressのインスタンス化
const app = express()
//8080番ポートでサーバーを待ちの状態にする。
//またサーバーが起動したことがわかるようにログを出力する
app.listen(8080, () => {
console.log("サーバー起動中");
});
//GETリクエストの設定
//'/get'でアクセスされた時に、JSONとログを出力するようにする
app.get('/', (req, res)=> {
res.json({ "pet": "dog"});
console.log('GETリクエストを受け取りました')
res.end();
})
2-2 GETリクエストを投げてみる
ターミナルでnode app.js
を実行し、サーバーを起動させます。サーバーが起動されると、「サーバー起動中」とログが出力されます。
curl -X GET http://localhost:8080/
を実行してGETリクエストを投げると、{ "pet": "dog""}
を取得できます(以下、右側のターミナル)。curl
コマンドでは-X
オプションでHTTPメソッドを指定できます。
また、サーバーを立ち上げているターミナルには「GETリクエストを受け取りました」のログが出力されます(以下、左側のターミナル)。
続いて、telnet
コマンドでGETリクエストを投げてみます。telnet localhost 8080
でwebサーバーにアクセスします。
以下のHTTPリクエストを投げてみます(最後に改行することを忘れないように)。
GET / HTTP/1.1
Host: localhost
curl
コマンドと同様にJSONが取れました。ステータスコードなど、HTTPレスポンスのヘッダ情報も確認できます。
3 POSTリクエストで送信したJSONを確認する
3-1 ファイル作成
npm install body-parser --save
を実行して、HTTPリクエストを解析するbody-parserモジュールをインストールします。
2-1で作成したapp.js
を以下のように変更します。
const express = require("express");
const app = express();
//body-parserモジュールを読み込み初期化する
const bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({ extended: true }));
//HTTPリクエストのボディをjsonで扱えるようになる
app.use(bodyParser.json());
app.listen(8080, () => {
console.log("サーバー起動中");
});
//POSTリクエストの作成
app.post("/", (req, res) => {
//HTTPリクエストのボディを出力
console.log(req.body);
console.log("POSTリクエストを受け取りました");
res.end();
});
3-2 POSTリクエストを投げてみる
2-2同様に、ターミナルでnode app.js
を実行し、サーバーを起動させます。サーバーが起動されると、「サーバー起動中」とログが出力されます(以下、左側のターミナル)。
curl -X POST http://localhost:8080/ -H "Content-type: application/json" -d '{ "pet" : "cat" }'
を実行するとサーバーに対して、{ "pet" : "cat" }
がPOSTされ、それが確認できます(以下、左側のターミナル)。
curl -X POST http://localhost:8080/ -H "Content-type: application/json" -d '{ "pet" : "cat" }'
では、-H
オプションで、HTTPリクエストのヘッダーに、"Content-type: application/json"
つまり送信するデータがJSONであることを伝え、また-d
で送信するJSONを記載しています。
続いて、telnet
コマンドでPOSTリクエストを投げてみます。telnet localhost 8080
でwebサーバーにアクセスします。
以下のHTTPリクエストを投げてみます。Content-Type
でHTTPリクエストのボディのデータ種類を設定し、Content-Length
でボディの文字数を記載します(書かないとこけます)。また、HTTPヘッダーとHTTPボディの前に改行を入れることを忘れないでください。
POST / HTTP/1.1
Host: localhost
Content-Type: application/json
Content-Length: 17
{ "pet" : "cat" }
curl
コマンドと同様にJSONをサーバーに送信し、それを確認することができました。
4 最後に
非常に簡単にWebサーバーを構築できて感動しました。普段フロントばかり触っているので、サーバーサイドができるようになると夢が広がります。また、curl
やtelnet
などあまり使わないコマンドの勉強もできて有意義でした。別の機会でここら辺をもっと深堀したいと思います!
Discussion