Node.jsでモジュールを使用する方法

Node.jsでレスポンス情報を修正する方法を紹介します。コードもGit Hubに掲載するので参考にしてください。

概要

Node.jsはモジュール化アプローチを採用しており、それによって開発者は関連する機能をまとめてコードを再利用しやすく管理しやすい形で表現できます。Node.jsモジュールはJavaScriptファイルで、そのファイル内で定義された関数やオブジェクトはデフォルトではそのモジュール内でのみ利用可能です。

ここでは、以下バージョンを使用した、ルーティング方法を説明します。

nodejs v19.7.0

また、今回作成するコードは全て、GitHubに掲載しています。

Node.jsモジュールの種類

Node.jsのモジュールは主に3つのカテゴリーに分けられます:

  1. コアモジュール: Node.jsに組み込まれているモジュールです。これらのモジュールはNode.jsのAPIの一部を構成し、require()関数を使っていつでも読み込むことができます。例えばhttp, url, path, fsなどです。

  2. ローカルモジュール: ユーザーが作成した自己定義のモジュールです。これらのモジュールは特定のアプリケーション内でのみ使用されます。

  3. サードパーティモジュール: npm (Node Package Manager)経由でインストールされる他の開発者が作成したモジュールです。これらはrequire()関数を使って読み込むことができます。

コアモジュールを利用する方法

コアモジュールはNode.jsに組み込まれているため、require()関数を使っていつでも読み込むことができます。例えば、httpモジュールを使ってHTTPサーバーを作成する場合は以下のようにします。

core.js

var http = require('http');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  console.log('Server is running on port 3000');
  res.end();
}).listen(3000);

解説

  • HTTPモジュールのインポート
var http = require('http');

‘http’はNode.jsの組み込みモジュールで、HTTP通信の機能を提供します。ここでは’http’モジュールをインポート(読み込み)し、変数httpに割り当てています。

  • HTTPサーバーの作成
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  console.log('Server is running on port 3000');
  res.end();
}).listen(3000);

‘http’モジュールのcreateServerメソッドを用いて、HTTPサーバーを作成します。このメソッドにはリクエストとレスポンスをパラメータとするコールバック関数を渡します。このコールバック関数は、サーバーがリクエストを受信するたびに実行されます。

作成したHTTPサーバーのlistenメソッドを用いて、サーバーを3000番ポートで起動します。これにより、サーバーは3000番ポートでクライアントからのリクエストを待ち受けます。

テスト

curl -X GET http://localhost:3000

このコードでは、httpモジュールをインポートしてhttp.createServer()関数を使ってHTTPサーバーを作成しています。createServer()関数は、HTTPリクエストを受け取った時に実行されるコールバック関数を引数に取ります。このコールバック関数はreqresの2つの引数を取ります。reqはHTTPリクエストオブジェクトで、resはHTTPレスポンスオブジェクトです。res.writeHead()関数はレスポンスヘッダーを設定します。res.end()関数はレスポンスボディを設定します。listen()関数はサーバーを指定したポートで起動します。

ローカルモジュールを利用する方法

ローカルモジュールはユーザーが作成した自己定義のモジュールです。ローカルモジュールを作成するには、以下の手順のようにします。

localmodule.js

// モジュールの作成
exports.myDateTime = function () {
  return Date();
};

local.js

// モジュールのインポート
var http = require("http");
var dt = require('./localmodule');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  res.write("現在日付は: " + dt.myDateTime());
  res.end();
}).listen(3000);

解説

  • ローカルモジュールのインポート
var dt = require('./localmodule');

‘./localmodule’は自分で作成したモジュールを指しています。ここでは、’localmodule’モジュールをインポート(読み込み)し、そのエクスポートされた関数やオブジェクトをdtという変数に割り当てています。このモジュールは、myDateTimeという関数をエクスポートしていることを前提としています。

  • HTTPサーバーの作成
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  res.write("現在日付は: " + dt.myDateTime());
  res.end();
})

‘http’モジュールのcreateServerメソッドを用いて、HTTPサーバーを作成します。このメソッドにはリクエストとレスポンスをパラメータとするコールバック関数を渡します。このコールバック関数は、サーバーがリクエストを受信するたびに実行されます。

  • レスポンスヘッダーの設定
res.writeHead(200, {'Content-Type': 'text/html'});

コールバック関数内で、レスポンスオブジェクトreswriteHeadメソッドを用いて、HTTPレスポンスのステータスコードとヘッダーを設定します。ここでは、ステータスコードは200(OK: リクエストが正常に処理された)、‘Content-Type’ヘッダーは’text/html’と設定しています。

  • 現在の日付の表示
res.write("現在日付は: " + dt.myDateTime());

レスポンスオブジェクトreswriteメソッドを用いて、現在の日付を表示します。ここでは、dtモジュールのmyDateTime関数を呼び出して現在の日付を取得し、その日付をレスポンスとしてクライアントに送信しています。

  • レスポンスの終了
res.end();

レスポンスオブジェクトresendメソッドを用いて、レスポンスを終了します。このメソッドは、レスポンスヘッダーとボディが全て送信され、通信が完了したことをクライアントに伝えます。

  • サーバーの起動
}).listen(3000);

作成したHTTPサーバーのlistenメソッドを用いて、サーバーを3000番ポートで起動します。これにより、サーバーは3000番ポートでクライアントからのリクエストを待ち受けます。

テスト

curl -X GET http://localhost:3000

サードパーティモジュールを利用する方法

サードパーティモジュールはnpm (Node Package Manager)経由でインストールされる他の開発者が作成したモジュールです。サードパーティモジュールをインストールするには、以下の手順のようにします。 今回は、expressモジュールをインストールしてみます。

npm install express

third.js

const express = require('express');

const app = express();

app.get('/', (req, res) => {
  res.send('Hello, Express.js!');
});

app.listen(3000, () => {
  console.log('サーバーがポート3000で起動しました');
});

解説

このコードはNode.jsとExpress.jsを用いて、Webサーバーを構築し、それを3000番ポートでリッスンしています。具体的な機能は以下のとおりです。

  • Expressモジュールのインポート
const express = require('express');

ExpressはNode.jsのための軽量で柔軟なWebアプリケーションフレームワークです。この行では、Expressモジュールをインポートし、定数expressに割り当てています。

  • Expressアプリケーションの生成
const app = express();

ここでは、express()関数を呼び出すことで、Expressアプリケーションを生成しています。このアプリケーションオブジェクト(app)は、ルーティングやミドルウェアの設定など、サーバーに関する多くのメソッドを持っています。

  • ルートルートへのGETリクエストの定義
app.get('/', (req, res) => {
  res.send('Hello, Express.js!');
});

app.get()メソッドを使って、ルートパス(’/’)へのGETリクエストが来たときの振る舞いを定義しています。第二引数はコールバック関数で、リクエスト(req)とレスポンス(res)オブジェクトを引数にとります。このコールバック関数は、“Hello, Express.js!“という文字列をクライアントに送り返します。

  • サーバーの起動
app.listen(3000, () => {
  console.log('サーバーがポート3000で起動しました');
});

app.listen()メソッドは、指定したポート(この場合は3000)でサーバーを起動します。第二引数としてコールバック関数を指定すると、サーバーが起動したときにその関数が実行されます。この例では、サーバーが起動したときに"サーバーがポート3000で起動しました"というメッセージをコンソールに表示します。

最終的に以下のようなディレクトリ構造になります。

express-core-project
├── node_modules
│   └── (依存関係のパッケージ)
├── third.js
├── package-lock.json
└── package.json

テスト

curl -X GET http://localhost:3000

まとめ

Node.jsのモジュールの使用方法について説明しました。