2016-10-05 8 views
0

ノードアプリケーションからメールで修飾URLを送信したい場合があります。または、私は幻のページオブジェクトの内容を設定したいと思います。nodejs express:reqオブジェクトのポートを持つホスト名

展開設定でこのような完全なURLを取得しました。

'http://' + req.hostname + '/myapp' 

は、しかし、開発マシン上で、これは通常生産:

http://localhost/myappではなくhttp://localhost:3000/myapp

オフ私はポートを取得する方法を知っているが、私はのようなものを使用したくない:

'http://' + req.hostname + ':' + port + '/myapp' 

これは、プロキシの背後に配置する際にこのようなナンセンスを生成します。

http://domain.com:3000/myapp

アプリは、プロキシ外で実行されている場合、要求オブジェクトからのポートとホスト名を取得するためのスマートな方法はありますか?

答えて

0

あなたが探しているのはX-Forwarded-For headerです。プロキシ、ロードバランサなどの背後にいる場合は、元のURLを取得するのが最も安全な方法です。リクエストに存在するかどうかを確認し、存在する場合はそれを使用してください。

このexpress sourceそれが役立つであろう。

  • req.hostnameの値はクライアントによって、またはによって設定することができる X-転送先ホストヘッダに設定された値から導出されます プロキシ

  • X-Forwarded-Protoは、逆のプロキシによって設定され、 がhttpsかhttpか無効な名前かどうかをアプリに伝えることができます。この値はreq.protocolに反映された です。

  • req.ipとreq.ipsの値には、X-Forwarded-Forの のアドレスのリストが入力されます。

+0

はい。私はこれをやっている。述べたように。デプロイメントでは、あらゆることが必要なように機能します。この問題は私の開発プラットフォーム上にのみ存在します。ですから、現時点で私はlocalhost:3000をハードコードしておき、バージョン管理の前にコメントを切り替えます。それは動作していますが、それはエレガントではないので、展開で動作するようにローカルホスト開発でこれを動作させることが可能な、よりスマートなものがあるかどうかという疑問があります。 –

関連する問題