ルーティング - Express.js

  • 作成日:
  • 最終更新日:2025/10/11

「 app.js 」ファイルにルートごとに用意されているスクリプトをロードします。

スクリプトのロードをするには、以下のようにします。

var mainRouter = require('./routes/main');

require でロードした各種のモジュールを読み込むには、以下のようにします。

app.use('/main', mainRouter);

routes のファイルを作成します。

routes/main.js

var express = require('express');
var router = express.Router();

router.get('/main', (req, res, next) => {
  res.render('main');
});

module.exports = router;

上記のルーティング設定の場合、「 routes/main.ejs 」というファイルにアクセスします。

ブラウザでページにアクセスするには、「 http://localhost:3000/main/main 」という URL でページにアクセスできます。

次の場合は、「 http://localhost:3000/main 」という URL でページにアクセスできます。

router.get('/', (req, res, next) => {
  res.render('main');
});

render と redirect の違い

render と redirect の違いを簡単に言うと、render は、「 view を指定するだけの処理 」で、redirect は、「 データ送信など Controll の処理を必要とするもの 」です。

使い分けについて次のように分けることができます。

保存に失敗した場合、render を利用し登録フォームを再表示させます。これにより、入力したフォームの内容が消えずに残すことができます。

保存に成功した場合は、redirect を使って別の一覧画面などへ移動させます。これによりブラウザで「更新(F5)」を押しても、二重保存されるのを防ぐことができます。

成功時に render を使ってしまうと、ブラウザを更新した際に「フォーム再送信の確認」が出てしまい、ユーザーが意図せず同じ投稿を何度も送ってしまうリスクがあります。

比較表
項目 render redirect
処理内容 テンプレートをそのまま描画 別のURLへ転送
URLの表示 変わらない 変わる
ブラウザの挙動 そのまま表示 指定されたURLへ再リクエスト
実行速度 速い(1往復) わずかに遅い(2往復)
データの継承 容易(変数がそのまま使える) 基本不可(セッション等が必要)

render

render は、サーバー側にあるテンプレート(HTMLファイルなど)を読み込み、現在のリクエストに対するレスポンスとして直接返却する処理です。

  • データの保持: 現在の処理で持っている変数(エラーメッセージなど)をそのまま画面に表示できます。
  • 主な用途: 入力フォームでバリデーションエラーが起きた際、入力内容を保持したまま「同じ入力画面」を再表示する場合によく使われます。

redirect

redirect は、サーバーがブラウザに対して「次はこのURLにアクセスし直して(HTTP 302など)」と命令を出す処理です。

  • 通信回数: 2回発生します(最初のリクエスト → サーバーからの転送命令 → ブラウザからの新しいリクエスト)。
  • データの保持: 基本的にリセットされます(セッションやFlashメッセージを使わない限り、前のデータは引き継げません)
  • 主な用途: データの保存が成功した後に「一覧画面」へ移動させたり、ログイン後に「マイページ」へ飛ばしたりする場合に使われます。