【保存版】Node.js Expressでホスト名の取得方法:サンプルコード付き
ここでは、Node.js Express で現在のリクエストのホスト名を取得する2つの方法をご紹介します。
方法 1: req.hostname プロパティを使用する
最も簡単な方法は、req.hostname
プロパティを使用することです。これは、Express によって提供される Request
オブジェクトのプロパティであり、現在のリクエストのホスト名を取得します。
app.get('/', (req, res) => {
const hostname = req.hostname;
console.log(`Request from hostname: ${hostname}`);
res.send('Hello from Express!');
});
このコードを実行すると、ブラウザから /
エンドポイントにリクエストを送信したときに、次の出力がコンソールに表示されます。
Request from hostname: localhost
もう1つの方法は、req.headers.host
ヘッダーを使用することです。これは、HTTP リクエストヘッダーの一部であり、ホスト名とポート番号を含みます。
app.get('/', (req, res) => {
const hostname = req.headers.host.split(':')[0];
console.log(`Request from hostname: ${hostname}`);
res.send('Hello from Express!');
});
このコードは、req.headers.host
ヘッダーを分割して、ホスト名のみを取得します。ポート番号は不要な場合が多いため、この方法が役立ちます。
補足
req.host
プロパティも使用できますが、これは非推奨です。代わりに、req.hostname
を使用するようにしてください。- ホスト名に加えて、ポート番号を取得したい場合は、
req.headers.host
ヘッダーを分割して2番目の要素を取得できます。
Node.js Express で現在のリクエストのホスト名を取得するサンプルコード
const express = require('express');
const app = express();
app.get('/', (req, res) => {
const hostname = req.hostname;
console.log(`Request from hostname: ${hostname}`);
res.send('Hello from Express!');
});
app.listen(3000, () => {
console.log('Server listening on port 3000');
});
このコードを実行すると、ブラウザから http://localhost:3000/
にアクセスすると、次の出力がコンソールに表示されます。
Request from hostname: localhost
方法 2: req.headers.host ヘッダーを使用する
const express = require('express');
const app = express();
app.get('/', (req, res) => {
const hostname = req.headers.host.split(':')[0];
console.log(`Request from hostname: ${hostname}`);
res.send('Hello from Express!');
});
app.listen(3000, () => {
console.log('Server listening on port 3000');
});
Request from hostname: localhost
説明
- 上記のコードは、Express アプリケーションを作成し、
/
エンドポイントに GET リクエストを処理するルートハンドラを定義します。 - ルートハンドラ内で、
req.hostname
またはreq.headers.host
ヘッダーを使用して、現在のリクエストのホスト名を取得します。 - 取得したホスト名は、コンソールにログ出力されます。
- アプリケーションはポート 3000 で起動します。
- このコードは、Node.js と Express がインストールされていることを前提としています。
- コードを実行するには、まず
node index.js
コマンドでサーバーを起動する必要があります。
Node.js Express で現在のリクエストのホスト名を取得するその他の方法
方法 3: os モジュールを使用する
os
モジュールを使用して、オペレーティングシステムのホスト名を取得し、それを現在のリクエストのホスト名として使用することができます。
const express = require('express');
const app = express();
const os = require('os');
app.get('/', (req, res) => {
const hostname = os.hostname();
console.log(`Request from hostname: ${hostname}`);
res.send('Hello from Express!');
});
app.listen(3000, () => {
console.log('Server listening on port 3000');
});
req.socket.remoteAddress
プロパティを使用して、クライアントの IP アドレスを取得し、それをホスト名に変換することができます。ただし、この方法は、すべての状況で正確な結果を保証するわけではないことに注意する必要があります。
const express = require('express');
const app = express();
const dns = require('dns');
app.get('/', (req, res) => {
const ipAddress = req.socket.remoteAddress;
dns.lookup(ipAddress, (err, address) => {
if (err) {
console.error(err);
res.send('Error getting hostname');
return;
}
const hostname = address.host;
console.log(`Request from hostname: ${hostname}`);
res.send('Hello from Express!');
});
});
app.listen(3000, () => {
console.log('Server listening on port 3000');
});
注意事項
os
モジュールとdns
モジュールを使用する方法は、より複雑で、ネットワーク接続や DNS 解決に依存するため、推奨される方法ではありません。- 一般的に、
req.hostname
またはreq.headers.host
ヘッダーを使用する方が、シンプルで効率的な方法です。
node.js express hostname