Express.js ミドルウェアの違い
Express.jsにおけるapp.use
とapp.get
の違い
Express.jsにおいて、app.use
とapp.get
はどちらもミドルウェアを登録するための関数ですが、その用途が異なります。
app.use
- 例
app.use((req, res, next) => { console.log('Request received'); next(); });
- 用途
すべてのHTTPメソッドに対して、すべてのURLパターンに適用されるミドルウェアを登録します。
app.get
- 例
app.get('/users', (req, res) => { res.send('User list'); });
app.get
はHTTPメソッドGET
に対する特定のURLパターンへの処理を定義するために使用されます。app.use
は汎用的なミドルウェアの登録に使用されます。
- ミドルウェアはリクエストの処理をチェーン状に連結することができます。
- Express.jsには、
app.post
、app.put
、app.delete
など、他のHTTPメソッドに対応する関数もあります。
const express = require('express');
const app = express();
// すべてのHTTPメソッドに対して、すべてのURLパターンに適用されるミドルウェア
app.use((req, res, next) => {
console.log('Request received');
next();
});
// すべてのHTTPメソッドに対して、特定のURLパターンに適用されるミドルウェア
app.use('/api', (req, res, next) => {
console.log('API request received');
next();
});
app.listen(3000, () => {
console.log('Server listening on port 3000');
});
const express = require('express');
const app = express();
// HTTPメソッドGETに対して、特定のURLパターンに適用されるミドルウェア
app.get('/users', (req, res) => {
res.send('User list');
});
app.listen(3000, () => {
console.log('Server listening on port 3000');
});
Express.jsミドルウェアの違い
Express.jsのミドルウェアは、リクエストの処理をチェーン状に連結することができます。ミドルウェアにはさまざまな種類があり、それぞれ異なる機能を提供します。
組み込みミドルウェア
- express.urlencoded
URLエンコードされたデータを解析します。 - express.json
JSON形式のデータを解析します。 - express.static
静的ファイルを提供します。
カスタムミドルウェア
- サードパーティモジュール
さまざまな機能を提供するミドルウェアが多数存在します。 - 関数
任意の処理を実装することができます。
ミドルウェアの順序
ミドルウェアは登録された順に実行されます。そのため、ミドルウェアの順序が処理の結果に影響を与えることがあります。
例
app.use((req, res, next) => {
console.log('Middleware 1');
next();
});
app.use((req, res, next) => {
console.log('Middleware 2');
next();
});
この例では、Middleware 1
が最初に実行され、次にMiddleware 2
が実行されます。
app.use
の代替方法
- app.route
特定のURLパターンに対して、複数のHTTPメソッドに対応するミドルウェアを登録します。
app.all('/users', (req, res) => {
res.send('All HTTP methods allowed');
});
app.route('/users')
.get((req, res) => {
res.send('GET request');
})
.post((req, res) => {
res.send('POST request');
});
app.all('/users', (req, res) => {
res.send('All HTTP methods allowed');
});
app.route('/users')
.get((req, res) => {
res.send('GET request');
})
.post((req, res) => {
res.send('POST request');
});
組み込みミドルウェアの代替方法
- サードパーティモジュール
組み込みミドルウェアと同等の機能を提供するサードパーティモジュールが多数存在します。
const bodyParser = require('body-parser');
app.use(bodyParser.json());
- クラス
オブジェクト指向のプログラミング手法を用いてミドルウェアを実装することができます。
class MyMiddleware {
constructor() {
this.count = 0;
}
handle(req, res, next) {
this.count++;
console.log('Middleware called:', this.count);
next();
}
}
const myMiddleware = new MyMiddleware();
app.use(myMiddleware.handle);
ミドルウェアの順序の代替方法
- ミドルウェアのネスト
ミドルウェアをネストすることで、実行順序を制御することができます。 - ミドルウェアの登録順
ミドルウェアは登録された順に実行されます。
app.use((req, res, next) => {
console.log('Middleware 1');
next();
});
app.use('/api', (req, res, next) => {
console.log('Middleware 2');
next();
});
node.js express