1. 自分自身も記録される
  2. 通った件数が数えられている
コース一覧
Node.js入門
ミドルウェア

Node.js入門

Node.jsの実行モデル、npm、Expressによるルーティング、REST API設計、データベース接続、トランザクションを使った購入処理、トークン認証まで、バックエンド開発の基礎を、毎レッスン実際にコードを書き、フリマアプリのAPIを自分の手で作りながら学びます。

1
Node.jsとは
01. Node.jsとは15分
02. スクリプトを実行する15分
03. npmとは15分
04. package.json15分
05. npmスクリプト15分
06. つくる:プロジェクト始動20分
07. 第1章クイズ10分
2
モジュールと非同期の復習
01. import/export15分
02. ファイルを読み書きする15分
03. async/await復習15分
04. JSONの取り回し15分
05. つくる:データ層20分
06. 第2章クイズ10分
3
はじめてのサーバー
01. サーバーとリクエスト15分
02. Expressを導入する15分
03. ルーティング15分
04. JSONを返す15分
05. 開発の回し方15分
06. つくる:サーバー始動20分
07. 第3章クイズ10分
4
REST APIのきほん
01. RESTの考え方15分
02. 一覧を返す15分
03. 1件を返す15分
04. 登録を受ける15分
05. 更新と削除15分
06. ステータスコード15分
07. つくる:商品CRUD完成20分
08. 第4章クイズ10分
5
リクエスト処理と検証
01. クエリパラメータ15分
02. 並び替えとページング15分
03. 入力検証15分
04. ミドルウェア15分
05. エラーハンドリング15分
06. つくる:検索API完成20分
07. 第5章クイズ10分
6
データベース接続
01. DBにつなぐ15分
02. 一覧・詳細をDB化15分
03. 出品をDB化15分
04. SQLインジェクション20分
05. 更新・削除をDB化15分
06. 購入トランザクション20分
07. つくる:DB版fleama20分
08. 第6章クイズ10分
7
認証のきほん
01. 認証と認可15分
02. パスワードハッシュ15分
03. ログインとトークン15分
04. 保護ルート15分
05. 本人のものだけ15分
06. つくる:認証完備20分
07. 第7章クイズ10分
8
総合制作
01. fleama API完成20分
02. Reactと接続する20分
03. サーバーで常駐させる20分
04. 自由拡張20分
05. 完成と次のステップ15分

ミドルウェア

全部のルートに同じことを書きたくない

第4章のつくる回で、5 つのルートが同じ骨格をしていることに気付きました。同じことは、ルートをまたいでも起こります。

届いたリクエストを記録したい。ログインしているか確かめたい。どれも全部のルートで同じ処理が要ります。5 か所にコピーすると、直すときも 5 か所です。

ミドルウェアは、その共通処理を手前にまとめて置く仕組みです。

リクエストが通る道

プレーンテキスト

リクエスト → ミドルウェア → ミドルウェア → ルート → 応答

リクエストはルートに届く前に、登録されたミドルウェアを順に通ります。実は express.json() もミドルウェアでした。本文を読める形に直してからルートへ渡す、という共通処理です。

書き方

JavaScript

app.use((req, res, next) => { console.log(req.method + " " + req.path); next(); });

app.use で登録します。引数が 3 つあるのがミドルウェアの目印です。

req と res はルートと同じですが、next が増えています。

next を呼ばないと止まる

next() は「次へ進んでよい」という合図です。

JavaScript

app.use((req, res, next) => { console.log("届きました"); // next() を呼ばない });

こう書くと、リクエストはここで止まったまま応答が返りません。ブラウザは待ち続けます。呼び忘れると固まるので、書いたら必ず確かめてください。

逆に、わざと止めるのが正しい場面もあります。第7章の認証では、トークンが無ければ next() を呼ばずに 401 を返して打ち切ります。

登録の順番が実行の順番

ミドルウェアは書いた順に通ります。ですから app.use は、ルートより前に書きます。

JavaScript

app.use(express.json()); // 先に本文を読めるようにして app.post("/items", ...); // それからルート

逆に書くと、ルートに届く時点ではまだ本文が読めません。第4章で express.json() を上のほうに書いていたのは、このためです。

手を動かす

演習では、リクエストを数えるミドルウェアを自作します。next の役割を、自分の手で確かめてください。

要件

  1. app.use でミドルウェアを登録し、log に メソッド パス の形で足す
  2. 足したあと next() を呼んで次へ進める
  3. ミドルウェアはルートより前に登録する

入出力例

request("GET", "/log") → "200 ["GET /log"]" request("GET", "/items") → "200 {"count":1}"

ヒント

`app.use((req, res, next) => { ... })` を、ルートより前に書きます

記録する文字列は `req.method + " " + req.path` で作れます

最後に `next()` を呼びます。忘れると応答が返らずに止まります

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/08/10

関連レッスン

  • エラーハンドリング

    共通エラー処理で500を整形し、落ちないAPIにできるようになります。

  • つくる:検索API完成

    検索と検証を備え、フリマらしい絞り込みを完成できるようになります。

  • 第5章クイズ

    リクエスト処理と検証の理解を4択で確認します。

  • DBにつなぐ

    接続して1行取り出すところまで確かめ、NodeからSQLを発行できるようになります。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • リクエストWeb 通信の基本単位、ブラウザの問い合わせとサーバーの返答
  • 処理計算や代入を表す長方形
  • ミドルウェアリクエストとレスポンスの間に挟まる処理関数。
  • 引数位置引数=順番で渡す。
  • ブラウザユーザーから見たWebのクライアント
  • 認証「この人は本当に本人?」のチェック
  • トークンLLM が扱う最小の文字単位
main.js
学習モード
エディタを読み込んでいます

メモ

ミドルウェア

⌘S で保存