Express: ミドルウェアを作成してルーティング処理を実装する

プログラミング
スポンサーリンク




こんにちは、おみです。

今回は、Expressでルーティングを行うミドルウェアを作成し処理を実装します。

 

スポンサーリンク

ミドルウェアとは

ミドルウェアとは、リクエストとレスポンスを受け取り、何らかの処理を行なって次の処理へ流す関数です。

Expressはマイクロフレームワークであるため、必要最小限の機能しか備わっていません。

そのため、例えば以下のような機能は自力で実装する必要があります。

  • DBへのアクセス処理
  • 認証処理

そういった処理を実装するために作成するものが、ミドルウェアです。

Expressではこのミドルウェアを組み合わせて、HTTPリクエストを受信後いくつかのミドルウェアを経由して処理を行い、レスポンスを返却することでサーバサイドの処理を実装します。

↓処理フロー例

  1. HTTPリクエストの受信
  2. ログ出力(ミドルウェア)
  3. ルーティング(ミドルウェア)
  4. DB登録処理(ミドルウェア)
  5. レスポンスの返却 ※ここもミドルウェアで行う場合があります

 

ミドルウェアを作成する

ミドルウェアを作成してみましょう。

今回は処理フロー例から

  • ログ出力
  • ルーティング

を行うミドルウェアを作成してみます。

 

成果物の処理フローは下記になります。

  1. HTTPリクエストの受信
  2. ログの出力
  3. ルーティング ← ここでレスポンスも返却

 

基本形

ミドルウェアの基本形は下記になります。

// ① 関数を変数に格納
var xxx = function() {
  // ここに処理を記述
}

// ② export
module.exports = xxx;

① 実装したい処理を関数として記述し、変数に格納します。

② module.exportを行い、ミドルウェアとして読み込んで使用できるようにします。

 

ログ出力

コンソールにアクセス日時をログとして出力する処理を作成します。

パス: middleware/log.js

var log = function(req, res, next) {
  // アクセスした時間を文字列として取得
  var date = (new Date()).toISOString();

  // コンソールに出力
  console.log(date);

  // 次の処理へ
  next();
};

module.exports = log;

 

ルーティング

HTTPリクエストを受け取って夏鈴ちゃんに関する情報をレスポンスとして出力するためのミドルウェアを作成します。

パス: middleware/router.js

// ExpressのRouterモジュールを呼び出し
var router = require("express").Router();


// ルーティングの設定
// /karin/
router.get("/karin", (req, res) => {
  res.status(200).send("藤吉夏鈴");
});

// /karin/place
router.get("/karin/place", (req, res) => {
  res.status(200).send("大阪府");
});

// /karin/birthday
router.get("/karin/birthday", (req, res) => {
  res.status(200).send("2001年08月29日");
});

// /karin/fiance
router.get("/karin/fiance", (req, res) => {
  res.status(200).send("おみ");
});

module.exports = router;

 

処理を実装する

作成したミドルウェアを組み合わせて、処理を実装してみましょう。

パス: index.js

// expressの読み込み
var express = require("express");
var app = express();

// ミドルウェアの読み込み
app.use(require("./middleware/log.js"));
app.use(require("./middleware/router.js"));

// ポートを指定して待ち受け
app.listen(3000);

 

index.jsを実行後例えば”http://localhost:3000/karin/fiance”にアクセスすると、コンソールへのログ出力とレスポンスの表示が行われます。

 

 

色々な意味で”正しく”実装できていますね

 

 

 

タイトルとURLをコピーしました