Node.js、Express.js のミドルウェアの理解と活用

ミドルウェア(Middleware)は Express.js で非常に重要な概念です。ミドルウェアは、リクエスト(request)とレスポンス(response)の間に位置し、リクエストを処理し、レスポンスを生成する関数です。

Express.js アプリケーションでミドルウェアは、リクエストに対する処理プロセスを中断し、作業を実行できるようにします。これにより、リクエストの前処理や後処理、ログ記録、認証、エラー処理などを簡単に実装できます。

シンプルなミドルウェアの例

Express.jsでミドルウェアを以下のように記述できます。

app.use(myMiddleware)を使用すると、すべてのリクエストが到着するたびに実行され、リクエストを取得した後に 'middleware get!' のコンソールを表示し、next()関数を呼び出します。

ミドルウェアを使用すると、リクエストに対するさまざまな処理を効果的に管理できます。

middleware

const express = require('express');
const app = express();

const myMiddleware = (req, res, next) => {
    console.log('middleware get!');
    next();
};

app.use(myMiddleware);

app.get('/', (req, res) => {
    res.send('Express.js Middleware');
});

app.listen(3000, () => {
    console.log('Server start');
});

認証を確認するミドルウェア関数

ユーザー認証ミドルウェアはよく使用されます。特定のルートにリクエストが入る前に、ユーザーがログインしているかどうかを確認し、ログインしていない場合はログインページにリダイレクトします。

authMiddlewareのコードを確認すると、ユーザーの認証を確認し、ユーザーがログインしていない場合は '/login' パスにリダイレクトします。

app.jsのコードを確認すると、/profile ルートに 'requireAuth' ミドルウェアを適用しました。

ユーザーが /profile ページにアクセスしようとすると、 'requireAuth' ミドルウェアがユーザーのログイン状態を確認し、

ログインしていない場合はログインページにリダイレクトします。

authMiddleware

const requireAuth = (req, res, next) => {
    const isAuthenticated = checkUserAuthentication(req);

    if (!isAuthenticated) {
        return res.redirect('/login');
    }
    next();
};

const checkUserAuthentication = (req) => {
    return req.session.isAuthenticated;
};

module.exports = requireAuth;

app.js

const express = require('express');
const app = express();
const requireAuth = require('./authMiddleware');

app.get('/profile', requireAuth, (req, res) => {
    res.send('profile Page');
});

app.get('/login', (req, res) => {
    res.send('login Page');
});

app.listen(3000, () => {
    console.log('Server start');
});