app.use()の役割
app.use()は、ミドルウェアを登録するためのメソッドです。すべてのリクエストに対して実行される処理を定義できます。
ミドルウェアとは
ミドルウェアとは、クライアントからのリクエストと最終的なレスポンスの間で実行される処理のことです。
app.use()の特徴
すべてのリクエストで実行される
app.use()で定義した処理は、パスやHTTPメソッドに関わらず、すべてのリクエストで実行されます。
app.use((req, res, next) => {
console.log("どんなリクエストでも実行される!");
next(); // 次の処理に進む
});
-
/、/about、/contactなど、どのパスでも実行される - GET、POST、PUTなど、どのメソッドでも実行される
next()で処理を繋ぐ
next()関数を呼ぶことで、次のミドルウェアやルート処理に制御を渡します。
app.use((req, res, next) => {
console.log("1番目のミドルウェア");
next(); // これがないと次に進まない
});
app.use((req, res, next) => {
console.log("2番目のミドルウェア");
next();
});
app.get("/", (req, res) => {
res.send("トップページ");
});
app.use()の実用例
ログ記録
すべてのリクエストの情報を記録できます。
app.use((req, res, next) => {
console.log(`${new Date().toISOString()} - ${req.method} ${req.path}`);
next();
});
認証チェック
リクエストヘッダーに認証情報があるか確認する処理を一箇所に集約できます。
app.use((req, res, next) => {
if (!req.headers.authorization) {
return res.status(401).send("認証が必要です");
}
next();
});
共通処理
リクエストオブジェクトに情報を追加するなど、共通の前処理を実行できます。
app.use((req, res, next) => {
req.requestTime = new Date();
next();
});
app.get()との違い
app.use()とapp.get()は似ていますが、適用範囲が異なります。
| 項目 | app.use() |
app.get() |
|---|---|---|
| 対象メソッド | すべて(GET, POST, PUT等) | GETのみ |
| 対象パス | すべて | 指定したパスのみ |
| 目的 | 共通処理・ミドルウェア | 特定のルート処理 |
// すべてのリクエストで実行
app.use((req, res, next) => {
console.log("ログ記録");
next();
});
// GETリクエストで/にアクセスした時だけ実行
app.get("/", (req, res) => {
res.send("トップページ");
});
まとめ
app.use()は、すべてのリクエストに対する前処理や共通処理を定義する場所です。リクエストが届くと、上から順番にapp.use()を通過し、最終的にapp.get()などのルート処理に到達します。
ミドルウェアを活用することで、認証やログ記録などの横断的な処理を効率的に実装できるようになりますね。