JavaScript、Node.js、Express でサーバーのポートを取得する

2024-06-18

Node.js で実行中のサーバーのポートを取得する方法

Node.js で Webサーバーを構築する場合、サーバーをどのポートで起動するかを指定する必要があります。ポート番号は、クライアントがサーバーに接続するために使用する番号です。サーバーのポート番号を知ることは、様々な場面で役立ちます。例えば、以下のことが可能です。

  • ブラウザでサーバーにアクセスする際の URL を正しく設定する
  • 複数のサーバーを異なるポートで実行する
  • ファイアウォールの設定を行う

方法

Node.js で実行中のサーバーのポートを取得するには、以下の 2 つの方法があります。

address() メソッドを使用する

http モジュールの Server オブジェクトには、address() メソッドが用意されています。このメソッドを呼び出すことで、サーバーが現在使用しているアドレスとポート番号を取得できます。

const http = require('http');

const server = http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World!');
});

server.listen(3000);

console.log(server.address()); // { address: 'localhost', port: 3000 }

process.env.PORT 環境変数を使用する

Node.js アプリケーションを起動する際に、PORT 環境変数にポート番号を設定することができます。この環境変数は、アプリケーション内で process.env.PORT としてアクセスできます。

const http = require('http');

const port = process.env.PORT || 3000;

const server = http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World!');
});

server.listen(port);

console.log(`Server is listening on port ${port}`);

補足

  • listen(0) メソッドを呼び出すと、Node.js はランダムな未使用ポートを選択してサーバーを起動します。このポート番号は、server.address() メソッドで取得できます。
  • Express フレームワークを使用している場合は、app.get('port') プロパティを使用してサーバーのポート番号を取得できます。



Node.js で実行中のサーバーのポートを取得するサンプルコード

address() メソッドを使用する

const http = require('http');

const server = http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World!');
});

server.listen(3000);

console.log(server.address()); // { address: 'localhost', port: 3000 }

説明

  1. http モジュールを require する
  2. http.createServer() 関数を使用して、HTTPサーバーを作成する
  3. リクエストハンドラー関数を定義する
  4. サーバーをポート 3000 で起動する
  5. server.address() メソッドを呼び出して、サーバーのアドレスとポート番号を取得する
  6. 取得した情報をコンソールに出力する

process.env.PORT 環境変数を使用する

const http = require('http');

const port = process.env.PORT || 3000;

const server = http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World!');
});

server.listen(port);

console.log(`Server is listening on port ${port}`);
  1. ポート番号が設定されていない場合は、デフォルト値の 3000 を使用する
  2. サーバーを port 番号で起動する
  • 上記のコードは、基本的な例です。実際のアプリケーションでは、必要に応じて修正する必要があります。
  • ポート番号は、アプリケーションの設定ファイルなどで定義することもできます。



Node.js で実行中のサーバーのポートを取得するその他の方法

net モジュールは、ネットワーク接続に関する操作を提供します。このモジュールの Server クラスを使用して、サーバーのポート番号を取得できます。

const net = require('net');

const server = net.createServer((socket) => {
  socket.on('data', (data) => {
    console.log(data.toString());
  });

  socket.on('end', () => {
    console.log('Client disconnected');
  });
});

server.listen(3000);

console.log(`Server is listening on port ${server.address().port}`);
  1. socket イベントリスナーを定義して、クライアントからの接続を処理する

os モジュールは、オペレーティングシステムに関する情報にアクセスを提供します。このモジュールの networkInterfaces() 関数を使用して、ネットワークインターフェースの情報を取得できます。取得した情報から、サーバーが使用しているポート番号を特定できます。

const os = require('os');

const networkInterfaces = os.networkInterfaces();

for (const name in networkInterfaces) {
  const iface = networkInterfaces[name];
  for (const address of iface) {
    if (address.family === 'IPv4' && !address.internal) {
      const port = address.port;
      if (port) {
        console.log(`Server is listening on port ${port}`);
      }
    }
  }
}
  1. os.networkInterfaces() 関数を使用して、ネットワークインターフェースの情報を取得する
  2. 取得した情報から、IPv4 アドレスとポート番号が設定されているインターフェースを抽出する
  3. 抽出されたインターフェースのポート番号をコンソールに出力する

注意事項

  • net モジュールと os モジュールを使用する方法は、より高度な方法であり、初心者には理解しにくい場合があります。

javascript node.js express


【徹底解説】JavaScript、HTML、Local Storageの最大保存容量と制限を超えた場合の対処法

この解説では、以下の内容について説明します。Local Storageの概要保存容量に影響を与える要素容量制限を超えた場合の対処法Local Storageは、ブラウザが提供するキーバリューペア形式のデータ保存機能です。JavaScriptを使用して、データを保存したり、読み込んだり、削除したりすることができます。...


AngularJSで$http.getリクエストにカスタムヘッダーを渡す

クエリパラメータは、URLの?以降に続くキーと値のペアで構成されます。$http. getメソッドにparamsオプションを渡すことで、リクエストにクエリパラメータを追加できます。上記の例では、/data/usersというURLにGETリクエストを送信し、idとnameという2つのクエリパラメータを含めます。...


ProvidePluginを使用してjQueryプラグインをグローバル変数として提供する

Webpackは、JavaScriptアプリケーションをバンドルするためのモジュールバンドラーです。Webpackは、AMDモジュールローダーを含むさまざまなモジュールローダーをサポートしています。WebpackでjQueryプラグインを使用するには、次の手順を実行する必要があります。...


レスポンス送信をマスターしよう!Node.js Expressでres.end()とres.send()を使いこなす

この二つの関数はどちらもレスポンス送信に用いられますが、いくつかの重要な違いがあります。処理のタイミングres. end(): レスポンスヘッダーとボディを全て送信し、クライアントとの接続を閉じます。res. send(): レスポンスヘッダーとボディを設定し、res...


「Property 'catch' does not exist on type 'Observable'」エラーの解決方法:その他

JavaScript、Angular、TypeScriptにおける非同期処理でObservableを使用する際、"Property 'catch' does not exist on type 'Observable<any>'" というエラーが発生することがあります。これは、Observableオブジェクトにはcatchメソッドが存在しないため発生するエラーです。...