Express.js で始める REST API 開発: app.use と app.get の実践例
Express.jsにおける app.use と app.get の違い
app.use
と app.get
は、Express.js でルーティングを定義するために使用されるメソッドです。 どちらも異なる目的を持ち、異なる方法で使用されます。
app.use
- ミドルウェアを登録するために使用されます。
- ミドルウェアは、リクエスト処理の前後に実行される関数です。
- すべてのパスに適用されるグローバルミドルウェアと、特定のパスにのみ適用されるローカルミドルウェアがあります。
- 例:認証、ロギング、静的ファイルの処理など
app.get
- 特定のパスに対する GET リクエストを処理するために使用されます。
- パスと、そのパスにアクセスしたときに実行されるコールバック関数を指定します。
- 複数の
app.get
を使用して、異なるパスに対する異なる処理を定義できます。 - 例:ユーザー情報の取得、ページの表示など
主な違い
機能 | app.use | app.get |
---|---|---|
目的 | ミドルウェアの登録 | GET リクエストの処理 |
適用範囲 | すべてのパスまたは特定のパス | 特定のパス |
リクエストメソッド | すべて | GET |
使用例 | 認証、ロギング、静的ファイルの処理 | ユーザー情報の取得、ページの表示 |
コード例
// すべてのパスに適用されるグローバルミドルウェア
app.use((req, res, next) => {
console.log('Request received:', req.method, req.url);
next();
});
// 特定のパスに対する GET リクエスト
app.get('/users', (req, res) => {
res.send('ユーザー一覧');
});
// 特定のパスに対する POST リクエスト
app.post('/users', (req, res) => {
// ユーザー情報の登録処理
});
app.use
はミドルウェアを登録するために使用し、app.get
は特定のパスに対する GET リクエストを処理するために使用します。- どちらもルーティングを定義するために使用されますが、異なる目的と使用方法を持ちます。
- コード例を参考に、それぞれの使い分けを理解しましょう。
すべてのパスに適用されるグローバルミドルウェア
app.use((req, res, next) => {
// リクエストの開始時刻を記録
req.startTime = Date.now();
// リクエスト処理の続き
next();
});
app.get('/', (req, res) => {
// レスポンス処理
const elapsedTime = Date.now() - req.startTime;
console.log(`処理時間: ${elapsedTime}ms`);
res.send('Hello World!');
});
このコードでは、すべてのパスに対して、リクエストの開始時刻を記録するミドルウェアを登録しています。 その後、app.get
で /
パスに対する GET リクエスト処理を定義しています。 レスポンス処理の中で、記録した開始時刻と現在の時刻の差から処理時間を算出し、出力しています。
app.use('/api', (req, res, next) => {
// API キーの認証処理
const apiKey = req.headers['x-api-key'];
if (!apiKey || apiKey !== 'secret-key') {
return res.status(401).send('Unauthorized');
}
// 認証成功
next();
});
app.get('/api/users', (req, res) => {
// ユーザー情報の取得処理
res.send('ユーザー一覧');
});
このコードでは、/api
パス以下のすべてのパスに対して、API キーの認証処理を行うミドルウェアを登録しています。 認証に成功した場合のみ、次の処理に進むようにしています。 /api/users
パスに対する GET リクエストは、認証処理を通過した後に、ユーザー情報の取得処理を実行します。
静的ファイルの処理
app.use(express.static('public'));
app.get('/', (req, res) => {
res.sendFile('index.html', { root: 'public' });
});
このコードでは、express.static
ミドルウェアを使用して、public
ディレクトリ内の静的ファイルを処理しています。 /
パスに対する GET リクエストは、index.html
ファイルを返すように設定されています。
app.use と app.get 以外のルーティング方法
その他の HTTP メソッド
app.get
以外にも、app.post
、app.put
、app.delete
などのメソッドを使用して、特定の HTTP メソッドに対する処理を定義できます。
app.post('/users', (req, res) => {
// ユーザー情報の登録処理
});
app.put('/users/:id', (req, res) => {
// ユーザー情報の更新処理
});
app.delete('/users/:id', (req, res) => {
// ユーザー情報の削除処理
});
パラメータ付きルート
:id
のようにコロン(:) を付けた文字列は、ルートパラメータとして使用できます。 リクエストオブジェクトからパラメータ値を取得して処理に利用できます。
app.get('/users/:id', (req, res) => {
const userId = req.params.id;
// ユーザー情報の取得処理
});
マウントポイント
別のルーターをサブパスにマウントすることができます。 コードを分割して管理しやすくなります。
const userRouter = express.Router();
userRouter.get('/', (req, res) => {
// ユーザー一覧の取得処理
});
userRouter.get('/:id', (req, res) => {
// ユーザー情報の取得処理
});
app.use('/users', userRouter);
まとめ
app.use
と app.get
は最も基本的なルーティング方法ですが、他にも様々な方法があります。 状況に合わせて適切な方法を選択しましょう。
node.js express