ルーティング
初めに
この記事で実行するサンプルコードは、以下の 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 にアクセスしてみてください。
ルートパス移行のパラメータによって表示する値を動的に変更しています。
まとめ
ルーターを利用することで、app.method によるルーティング処理を分離することができ、コードをカテゴリごとに分けることができます。 これにより、保守性の高いコード構築が可能になります。