Expressフレームワークにおけるreq
オブジェクトは、HTTPリクエストのデータを表す非常に重要な要素です。このオブジェクトを適切に理解し、活用することは、Node.jsを用いたウェブアプリケーション開発において不可欠です。本記事では、req
オブジェクトの基本から、詳細な使い方までを網羅的に解説します。
1. req
オブジェクトとは?
req
(リクエスト)は、クライアントからサーバーに送信されたHTTPリクエストに関する情報を含むオブジェクトです。Expressのルートハンドラーにおいて、このreq
オブジェクトを使用して、リクエストに関するさまざまなデータ(ヘッダー、ボディ、パラメータなど)にアクセスします。

Expressでの基本的なルート定義は以下のようになります:
javascriptapp.get('/example', (req, res) => {
res.send('Hello World!');
});
上記のコードでは、req
オブジェクトがGETリクエストを通じて受け取った情報を含んでいます。このreq
オブジェクトは、リクエストが送信されるたびにExpressによって自動的に生成されます。
2. req
オブジェクトの主要なプロパティ
req
オブジェクトには、HTTPリクエストに関連するさまざまなプロパティが含まれています。ここでは最も一般的に使用されるプロパティについて説明します。
2.1 req.params
req.params
は、URLパラメータを格納するオブジェクトです。ルートにパラメータを含めることで、動的なデータを取得できます。たとえば、ユーザーのIDを取得する場合などに使用されます。
javascriptapp.get('/user/:id', (req, res) => {
const userId = req.params.id;
res.send(`User ID is ${userId}`);
});
ここで、/user/123
というURLにアクセスすると、req.params.id
は123
になります。
2.2 req.query
req.query
は、クエリストリングパラメータを格納します。URLに?key=value
の形式でデータが含まれる場合に使用されます。
javascriptapp.get('/search', (req, res) => {
const searchQuery = req.query.q;
res.send(`Searching for: ${searchQuery}`);
});
たとえば、/search?q=express
というURLにアクセスすると、req.query.q
はexpress
になります。
2.3 req.body
req.body
は、POSTリクエストなどで送信されたリクエストボディを格納します。リクエストボディを扱うためには、express.json()
やexpress.urlencoded()
ミドルウェアを使用して、リクエストのパースを行う必要があります。
javascriptapp.use(express.json());
app.post('/submit', (req, res) => {
const data = req.body;
res.send(`Received data: ${JSON.stringify(data)}`);
});
ここで、JSON形式のデータが送信されると、req.body
でそのデータにアクセスできます。
2.4 req.headers
req.headers
は、HTTPリクエストのヘッダー情報を格納しています。リクエストヘッダーには、ユーザーエージェントやコンテンツタイプなど、リクエストに関連するメタデータが含まれます。
javascriptapp.get('/headers', (req, res) => {
const userAgent = req.headers['user-agent'];
res.send(`User-Agent: ${userAgent}`);
});
上記の例では、クライアントのユーザーエージェント情報を取得しています。
2.5 req.method
req.method
は、HTTPメソッド(GET、POST、PUT、DELETEなど)を取得します。これを使用することで、リクエストの種類に応じた処理を行うことができます。
javascriptapp.all('*', (req, res) => {
res.send(`Request method: ${req.method}`);
});
この例では、リクエストメソッドを返すルートを定義しています。
3. req
オブジェクトを使った実践的な例
次に、req
オブジェクトを活用した簡単なウェブアプリケーションを作成してみましょう。以下のコードは、ユーザーから送信されたデータを受け取り、処理して応答を返す例です。
javascriptconst express = require('express');
const app = express();
app.use(express.json()); // JSONボディのパースを有効にする
app.post('/user', (req, res) => {
const { name, age } = req.body; // ボディからデータを抽出
if (name && age) {
res.send(`User ${name} is ${age} years old.`);
} else {
res.status(400).send('Name and age are required!');
}
});
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
上記の例では、/user
エンドポイントでPOSTリクエストを受け取り、リクエストボディからname
とage
を抽出して応答しています。
4. req
オブジェクトの便利な使い方
4.1 リクエストログの記録
リクエストがどのように行われているかを記録するために、req
オブジェクトの情報をログに出力することができます。
javascriptapp.use((req, res, next) => {
console.log(`${req.method} ${req.url}`);
next(); // 次のミドルウェアに進む
});
これにより、どのリクエストがサーバーに届いたかを確認できます。
4.2 リクエストの検証
リクエストの検証を行うことで、不正なリクエストや不完全なリクエストを防ぐことができます。たとえば、特定のパラメータが欠けている場合にエラーを返すことができます。
javascriptapp.post('/register', (req, res) => {
const { username, password } = req.body;
if (!username || !password) {
return res.status(400).send('Username and password are required!');
}
res.send('Registration successful!');
});
このように、リクエストの内容を検証することは、アプリケーションのセキュリティを高めるために重要です。
5. 結論
Expressのreq
オブジェクトは、リクエストに関するすべての情報を提供する非常に強力なツールです。このオブジェクトを適切に活用することで、リクエストパラメータやヘッダー、ボディなどにアクセスし、クライアントの要求に応じた動的な応答を行うことができます。基本的なプロパティやメソッドの使い方を理解することで、より効率的で安全なウェブアプリケーションの開発が可能になります。