ルーティング

初めに

この記事で実行するサンプルコードは、以下の GitHub レポジトリで確認できます。

https://github.com/asakura-sakura/Express

概要

ルートからあるカテゴリのリソースにアクセスするとき、同じファイルで似たようなパスルートを定義していると、どのパスがどのような機能を持っているかわかりづらくなります。この問題を放置し、開発し続けると複雑になっていき、段々と保守性の悪いプロジェクトが出来上がってしまいます。そこで、Express.Router という機能を使い、ファイルを分けることが可能です。

静的ルーティング

別ファイルに分けるには、Express.Router をインスタンス化したルーターオブジェクトでルーティング処理を記述したファイルを、メインファイルで読み込んであげることで実装できます。 以下が例です。

// /routing/static-routing.js
const express = require("express");
const router = express.Router();

router.get("/one", (req, res) => {
  res.send("GET 1");
});

router.get("/two", (req, res) => {
  res.send("POST 2");
});

module.exports = router;
// /index.js
const express = require("express");
const app = express();

const staticRouter = require("./routing/static-routing");

app.use("/routes", staticRouter);

app.listen(3000);

試しに、以下の URL にアクセスしてみてください。 http://localhost:3000/routes/one
http://localhost:3000/routes/two
それぞれにアクセスしてみてください。

それぞれレスポンスが帰ってくるはずです。

動的ルーティング

一般的な Web サービスでは、静的ページだけではなく、パラメータによって画面を切り替えるような動的ページも作成しなければならない場合があります。 動的ページを作成するには、パラメータによって画面表示を変えるような処理が必要です。 Express では、パラメータを受け取るには、app.method のパスにコロン【:】を付与する必要があります。以下が動的ルーティングの例です。

// /routing/dynamic-routing.js
const express = require('express');
const app = express();

app.get('/:id', (req, res) => {
  res.send(`現在のパラメータ ID は ${req.params.id} です`);
});

app.listen(3000);

試しに http://localhost:3000/123 にアクセスしてみてください。

画像に alt 属性が指定されていません。ファイル名: キャプチャ-9.png

ルートパス移行のパラメータによって表示する値を動的に変更しています。

まとめ

ルーターを利用することで、app.method によるルーティング処理を分離することができ、コードをカテゴリごとに分けることができます。 これにより、保守性の高いコード構築が可能になります。