JavaScript、Node.js、Express でサーバーのポートを取得する
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 }
説明
http
モジュールをrequire
するhttp.createServer()
関数を使用して、HTTPサーバーを作成する- リクエストハンドラー関数を定義する
- サーバーをポート 3000 で起動する
server.address()
メソッドを呼び出して、サーバーのアドレスとポート番号を取得する- 取得した情報をコンソールに出力する
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}`);
- ポート番号が設定されていない場合は、デフォルト値の 3000 を使用する
- サーバーを
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}`);
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}`);
}
}
}
}
os.networkInterfaces()
関数を使用して、ネットワークインターフェースの情報を取得する- 取得した情報から、IPv4 アドレスとポート番号が設定されているインターフェースを抽出する
- 抽出されたインターフェースのポート番号をコンソールに出力する
注意事項
net
モジュールとos
モジュールを使用する方法は、より高度な方法であり、初心者には理解しにくい場合があります。
javascript node.js express