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や他のフレームワークの使用を検討してください。