Expressとは

Node.jsのWebアプリケーション

ExpressNode.jsで利用できる、WebアプリケーションおよびAPI構築できる軽量で高速なWebアプリケーションフレームワークです。

シンプルで拡張可能

シンプルな設計とモジュール性を持ち、プロジェクトの要件に合わせてカスタマイズできます。また、多くのサードパーティモジュールが利用可能で、新しい機能を追加しやすくなっています。

Expressの主な機能

ルーティング

HTTPリクエストに対するルーティングを簡単に設定できます。ルーティングは、HTTPメソッド(GET、POST、PUT、DELETEなど)とURLパスに基づいて処理されます。

ミドルウェア

Expressはミドルウェアをサポートし、リクエストとレスポンスの間でカスタムの処理を挿入できます。認証、セッション管理、ログ記録、入力検証などの一般的なタスクを実行するのに便利です。

テンプレートエンジン

HTMLを生成するためのテンプレートエンジンをサポートします。一般的なテンプレートエンジンとしては、EJSPugHandlebarsなどがあります。

静的コンテンツ

静的なコンテンツ(CSS、JavaScript、画像など)を公開するミドルウェアを簡単に設定できます。

RESTful APIの作成

RESTfulなAPI構築するためのツールとして使用されています。HTTPメソッドからエンドポイントを作成し、JSONなどのデータフォーマットでデータを送受信できます。

Express の基本

サーバ起動

Expressでは、Node.jsサーバを簡単に起動できます。

サーバ作成

express() でサーバを作成します。

server.js
const app = express();

サーバ待機

サーバを起動すると、ポート番号とホストで待機状態になります。

server.js
app.listen(ポート, ホスト, () => {
  //処理
);
  • デフォルトポート:3000
  • デフォルトホスト:localhost

ルーティング

Express は、get()post() などでHTTPクエストをマッピングできます。 指定のURLでアクセスすると、対応のリクエストメソッドとコールバック関数が実行されます。

GETリクエスト

app.get(URLパス、コールバック関数);

POSTリクエスト

app.post(URLパス、コールバック関数);

すべてのリクエスト

app.all(URLパス、コールバック関数);

GETリクエストの場合

GETリクエストは get() を利用し、リクエスト&レスポンスのオブジェクトを引数としたコールバック関数を設定します。

app.get(URLパス, (req, res) => {
    //処理
});

Expressでサーバ作成

ExpressでWebサーバの起動してみましょう。

ファイル構成

express_sample/
├── node_modules/
├── .env
├── package-lock.json
├── package.json
└── server.js

モジュール

  • express
  • dotenv

インストールと設定

npm 初期化

npmで初期化します。

npm init -y

パッケージインストール

「express」「dotenv」パッケージをインストールします。

npm i express dotenv

設定ファイル「.env」

「.env」を作成してホストとポート番号を設定します。

.env
HOST=localhost
PORT=3000

Expressサーバ

プロジェクト内に「server.js」を作成します。

モジュール読み込み

expressモジュールを読み込みます。

server.js
const express = require('express');

設定読み込み

dotenvモジュールを使って、「.env」のホストとポートを読み込みます。

server.js
const dotenv = require('dotenv');
dotenv.config();

const host = process.env.HOST;
const port = process.env.PORT;

Expressサーバ作成

「server.js」でExpressサーバを作成します。

server.js
const app = express();

マッピング

GETリクエストで「/」にアクセスしたときの処理を実装します。

server.js
app.get("/", (req, res) => {

});

リクエストオブジェクトreqから、本文、URL、クエリパラメーターをログ表示します。

server.js
app.get("/", (req, res) => {
    console.log(req.body);
    console.log(req.url); 
    console.log(req.query);
    res.send("Hello Express!");
});
  • 本文:req.body
  • URL:req.body
  • クエリパラメータ:req.query

レスポンス

レスポンスオブジェクトressend() でクライアントにレスポンスします。

res.send(結果);
server.js
app.get("/", (req, res) => {
    ...
    res.send("Hello Express!");
});

サーバの待機

listen() でサーバ待機処理します。

server.js
app.listen(port, host, () => {
    console.log(`Server listen: http://${host}:${port}`);
});

サーバ起動確認

Express サーバを起動し、ブラウザで確認してみます。

node でサーバ起動

ターミナルで「server.js」を実行します。

node server
Server listen: http://localhost:3000

ブラウザで確認

ブラウザで「http://localhost:3000」にアクセスします。「Hello Express!」が表示されれば成功です。

GETパラメータの確認

http://localhost:3000?keyword=apple のように GETパラメータでアクセスしてみます。

ターミナルでログで、GETパラメータが取得できるか確認してみましょう。

undefined
/?keyword=apple
{ keyword: 'apple' }

Express サーバ停止

Express サーバ停止したいときは、起動中のターミナルで Ctrl + C を押します。

ソース

const express = require('express');

const dotenv = require('dotenv');
dotenv.config();
const host = process.env.HOST
const port = process.env.PORT

const app = express();

app.get("/", (req, res) => {
    console.log(req.body);
    console.log(req.url);
    console.log(req.query);
    res.send("Hello Express!");
});

app.listen(port, host, () => {
    console.log(`Server listen: http://${host}:${port}`);
});

演習

問題1

server.js を修正して、 /profileGETアクセスしてレスポンスを返してみましょう。※プログラムを修正したら、サーバの再起動が必要です。