Node.jsでリクエスト情報を処理する方法
概要
Node.jsのHTTPモジュールでは、リクエストの処理はイベントリスナー内で行います。
イベントリスナーの引数には、requestオブジェクトとresponseオブジェクトが渡されます。
これらのオブジェクトを使用して、リクエストに関連するデータの取得やレスポンスの生成などを行います。
ここでは、以下バージョンを使用した、Node.jsでリクエスト処理する方法を説明します。
nodejs v19.7.0
また、今回作成するコードは全て、GitHubに掲載しています。
リクエスト情報を取得する方法
リクエストに関する情報を取得するには、リクエストオブジェクトを使用します。 リクエストオブジェクトは、クライアントからのリクエストに関する情報を格納しています。HTTPモジュールのイベントリスナー内で使用され、リクエストヘッダー、パラメータ、ボディなどのデータにアクセスするために利用されます。
以下のサンプルコードは、Node.jsでリクエストオブジェクトを理解するための例です。GETリクエストを受け取り、リクエストヘッダー、クエリパラメータにアクセスして、それらの値を含むレスポンスを返します。
request.js
const http = require('http');
const url = require('url');
const server = http.createServer((req, res) => {
// リクエストヘッダーの取得
const headers = req.headers;
// クエリパラメータの取得
const queryParam = url.parse(req.url, true).query;
const response = {
headers: headers,
queryParam: queryParam,
};
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify(response));
});
server.listen(3000, () => {
console.log('Server is running on port 3000');
});
解説
- HTTPモジュールのインポートとサーバーの作成
const http = require('http');
const url = require('url');
const server = http.createServer((req, res) => {
// コード省略
});
HTTPモジュールとURLモジュールをインポートし、そのインスタンスを作成します。
- ルートハンドラの定義
const server = http.createServer((req, res) => {
// リクエストヘッダーの取得
const headers = req.headers;
// クエリパラメータの取得
const queryParam = url.parse(req.url, true).query;
const response = {
headers: headers,
queryParam: queryParam,
};
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify(response));
});
ルート(’/’)へのGETリクエストをハンドリングします。リクエストが来ると、リクエストヘッダーとクエリパラメータを取得し、それらを含むオブジェクトをJSON形式でレスポンスとして返します。
- サーバーの起動
server.listen(3000, () => {
console.log('Server is running on port 3000');
});
HTTPサーバーをポート3000でリッスンさせ、サーバーを起動します。サーバーが起動したら、“Server is running on port 3000"というメッセージをコンソールに出力します。
テスト
curl http://localhost:3000
まとめ
req
オブジェクトを使用することで、以下のことが可能になります:
- リクエストヘッダーやクエリパラメータなどのリクエストデータにアクセスできます。
- リクエストのパスパラメータやボディデータなど、リクエストの異なる部分のデータを取得できます。
req
オブジェクトを使用することで、リクエストのデータによる様々な操作を行うことができます。
req
オブジェクトには、多くのプロパティやメソッドがあり、高度なカスタマイズや制御が可能です。
なお、プレーンなNode.jsではバリデーションやミドルウェア関数といった概念がないため、Express.jsで可能な機能の一部は制限されます。より複雑なリクエスト処理やエラーハンドリングが必要な場合は、Express.jsや他のフレームワークの使用を検討してください。