web-dev-qa-db-ja.com

Node JS return hostname

私はまだNode JSとjavascriptとアプリを持っています。Ubuntu12.04のサーバーのホスト名を取得する必要がある設定ファイルがあります。

私は次のようなものを試しました:

 window.location.hostname

しかし、それはうまくいきませんでした。以下のサンプルコード:

exports.config = {
    app_name : [ window.location.hostname ]
}

文字列を使用すると、文字列は正常に読み込まれますが、これはGithubを介して管理されるため、アプリの読み込み時に区別する必要があります。

38
nocode

「os」モジュールのnode.jsドキュメントによる に従って、hostname()関数を持つ「os」モジュールをロードする必要があります。

_var os = require("os");
var hostname = os.hostname();
_

ただし、それはホスト名のみです-ドメイン名(FQDN)なし。 FQDNを取得する簡単な方法はありません。 node.js DNS関数 を使用して、サーバーのIPアドレス(os.networkInterfaces()で取得します。上記のドキュメントリンクを参照)を名前に変換することができます。唯一の問題は、サーバーが異なるインターフェースと名前を持っている可能性があるため、どちらを使用するかを決定する必要があることです。

windowオブジェクトを使用しようとしましたが、それはブラウザーのJavaScriptランタイム環境にのみ存在します。サーバー側のJavaScriptにはウィンドウがないため、windowオブジェクトはありません。 この質問をご覧ください:「node.jsにはブラウザのウィンドウオブジェクトと同等のものがあります」

この情報では、あなたの質問は少し奇妙です-ブラウザでは_window.location.hostname_は現在のページがロードされたURLのホスト部分です。それをサーバーコンテキストにどのように変換しますか? node.jsで実行するコードは、定義上、まさにそのサーバーのものであるため、実際にはこの情報は必要ありません。特にマッシュアップ(さまざまなソースからのJSコード)を実行するとき、その情報は可変であるため、ブラウザーでそれが必要になる場合があります。サーバーでは、ローカルファイルシステムであることを常に知っています。

ところで、localhostをホスト名としていつでも使用できます:)

79
John Smith

http.createServer でサーバーを実行している場合、window.location.hostnameから取得するのと同じホスト名のみを取得できます。その場合、ホスト名はリクエストオブジェクトのプロパティの1つです。

request.headers.Host

私はこの答えを信用したいのですが、答えがわからなかったのでここにいるだけです。答えが投稿されているのを見つけました このSO answer で。

6
Vince