リクエストとレスポンスの処理

Node.jsを用いた簡易Webサーバの構築において、「リクエストとレスポンスの処理」はHTTP通信の中心的な役割を果たします。以下にその仕組みと実装方法について詳しく説明します。


1. リクエスト(request)の処理とは

クライアント(ブラウザやAPIクライアントなど)からサーバに送信される情報を受け取る工程です。
Node.jsでは、http.createServer()のコールバック関数内で第1引数として渡されるreqIncomingMessageオブジェクト)を通して取得します。

主なプロパティ

  • req.method:HTTPメソッド(例:GET、POST)

  • req.url:アクセスされたパス(例:/about

  • req.headers:HTTPヘッダ情報(オブジェクト形式)

  • req.on('data', callback):POST等で送信されたボディデータの受信

  • req.on('end', callback):全データの受信完了


2. レスポンス(response)の処理とは

サーバがクライアントに返す応答の内容を構築・送信する工程です。
Node.jsでは、コールバック関数内の第2引数resServerResponseオブジェクト)を使用します。

主なメソッド

  • res.writeHead(statusCode, headers):ステータスコードとヘッダを設定

  • res.write(data):ボディにデータを書き込む(複数回可能)

  • res.end([data]):レスポンスの送信を完了する(省略可)


3. サンプルコードでの流れ

javascript
const http = require('http'); const server = http.createServer((req, res) => { console.log(`リクエスト受信: ${req.method} ${req.url}`); if (req.url === '/' && req.method === 'GET') { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('トップページへようこそ'); } else if (req.url === '/about' && req.method === 'GET') { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('このサイトについて'); } else { res.writeHead(404, { 'Content-Type': 'text/plain' }); res.end('ページが見つかりません'); } }); server.listen(3000, () => { console.log('サーバがポート3000で起動しました'); });

処理の概要

  • サーバは常にリクエストを監視し、内容に応じて異なるレスポンスを返す。

  • req.urlreq.methodを条件分岐してルーティング処理を実現。

  • 適切なHTTPステータスコード(例:200、404)とヘッダを設定。


4. 応用的なポイント

  • POSTリクエストのボディを扱う場合は、req.on('data')req.on('end')を用いて非同期に処理します。

  • JSONレスポンスを返すには、Content-Type: application/jsonJSON.stringify()が必要です。

  • セキュリティ上、res.writeHead()で正しいContent-Typeを明示することが重要です。


まとめ

Node.jsではhttpモジュールを用いて低レベルでHTTP通信を制御できます。リクエストとレスポンスはIncomingMessageServerResponseというオブジェクトを介して扱われ、条件に応じた柔軟なレスポンスを返すことが可能です。これにより、Web APIやWebアプリケーションの基本的なサーバ処理を実装できます。

ChatGPT4o 生成日:2025/06/25