Express 関数のパラメータ解説
Express 関数における「res」と「req」パラメータの解説 (日本語)
Node.js と Express を使ったプログラミングにおいて、Express 関数の引数として頻繁に登場する「res」と「req」パラメータについて解説します。
res (Response オブジェクト)
- 主なプロパティとメソッド
res.send(data)
: クライアントに指定したデータ (文字列、オブジェクト、バッファなど) を送信します。res.json(data)
: JSON形式でデータを送信します。res.status(code)
: レスポンスのステータスコードを設定します (例:res.status(404)
で 404 Not Found を設定)。res.redirect(url)
: クライアントを指定した URL にリダイレクトします。res.render(view, data)
: 指定したテンプレートファイル (通常は EJS や Pug) をレンダリングしてレスポンスとして送信します。
- 役割
クライアントからのリクエストに対してサーバーが送信するレスポンスを管理するオブジェクトです。
- 主なプロパティとメソッド
req.method
: HTTP メソッド (GET、POST、PUT、DELETE など) を取得します。req.url
: クライアントがリクエストした URL を取得します。req.query
: クエリパラメータ (URL の?
以降の部分) を取得します。req.body
: POST リクエストで送信されたボディデータ (通常は JSON 形式) を取得します。req.params
: URL パラメータ (パスの一部) を取得します。
- 役割
クライアントからサーバーに送信されたリクエストに関する情報を保持するオブジェクトです。
例
app.get('/users/:id', (req, res) => {
const userId = req.params.id;
// ユーザーの情報をデータベースから取得する
const user = getUserById(userId);
if (user) {
res.json(user);
} else {
res.status(404).send('User not found');
}
});
Express 関数の「res」と「req」パラメータの具体的なコード例と解説
基本的な GET リクエスト処理
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
// クライアントからリクエストを受け取った際の処理
res.send('Hello, Express!');
});
app.listen(port, () => {
console.log(`Server listening on port ${port}`);
});
- res.send('Hello, Express!')
クライアントに "Hello, Express!" という文字列をレスポンスとして送信します。 - (req, res)
リクエストオブジェクトreq
とレスポンスオブジェクトres
を引数に持つコールバック関数を指定します。 - app.get('/')
ルート (/
) への GET リクエストを処理するルートを定義します。
クエリパラメータの取得
app.get('/search', (req, res) => {
const searchQuery = req.query.q;
// searchQuery を使って検索処理を行う
res.send(`You searched for: ${searchQuery}`);
});
- req.query.q
クエリパラメータq
の値を取得します。例えば、URLが/search?q=nodejs
の場合、searchQuery
に "nodejs" が代入されます。
URL パラメータの取得
app.get('/users/:userId', (req, res) => {
const userId = req.params.userId;
// userId を使ってユーザー情報を取得する
const user = getUserById(userId);
res.json(user);
});
- req.params.userId
URL パラメータuserId
の値を取得します。例えば、URLが/users/123
の場合、userId
に "123" が代入されます。
POST リクエストの処理
app.post('/submit', (req, res) => {
const formData = req.body;
// formData を使って何か処理を行う
console.log(formData);
res.send('Data received');
});
静的ファイルの提供
app.use(express.static('public'));
- express.static('public')
public
ディレクトリ内のファイルを静的に提供します。
各パラメータの役割のおさらい
-
- サーバーからクライアントへのレスポンスを管理します。
res.send()
: データを送信res.status()
: ステータスコードを設定res.redirect()
: リダイレクトres.render()
: テンプレートをレンダリング
-
- クライアントからのリクエストに関する情報を保持します。
req.url
: リクエストされた URLreq.query
: クエリパラメータreq.params
: URL パラメータreq.body
: POST リクエストのボディ
- これら2つのオブジェクトを適切に組み合わせることで、様々な種類のWebアプリケーションを開発することができます。
res
オブジェクトは、クライアントにレスポンスを送信するために使用します。req
オブジェクトは、クライアントからのリクエストに関する情報を取得するために使用します。
- Node.js と Express を組み合わせることで、強力なWebアプリケーションを開発することができます。
- Express のドキュメントには、より詳細な情報が記載されています。
- 上記のコード例は、非常にシンプルなものです。実際のアプリケーションでは、エラー処理、認証、データベースとの連携など、より複雑な処理を行う必要があります。
学習のヒント
- 各コード例を実際に実行して、動作を確認してみましょう。
ミドルウェア関数
- 利点
- コードの再利用性が高くなる。
- ロジックをモジュール化できる。
- 処理のフローを明確に管理できる。
const express = require('express');
const app = express();
// ミドルウェア関数
function logger(req, res, next) {
console.log(`${req.method} ${req.url}`);
next();
}
app.use(logger);
app.get('/', (req, res) => {
res.send('Hello, Express!');
});
ルーティングモジュール
- 利点
- コードの構造化が容易になる。
- ルーティングの管理がシンプルになる。
const express = require('express');
const app = express();
// ルーティングモジュール
const usersRouter = require('./users');
app.use('/users', usersRouter);
// usersRouter.js
const express = require('express');
const router = express.Router();
router.get('/', (req, res) => {
res.send('Users list');
});
module.exports = router;
フレームワークやライブラリ
- 利点
- 多くの機能が提供される。
- 開発のスピードが上がる。
例
- Hapi
プラグインベースのフレームワーク。 - Fastify
高性能なフレームワーク。 - Koa
Express の作者によって開発された軽量フレームワーク。
非同期処理の管理
- 利点
- パフォーマンスが向上する。
- コードが読みやすくなる。
- Promises
非同期処理の結果を管理する。 - async/await
非同期処理を同期的なコードのように記述できる。
node.js express