2016-10-05 3 views
0

Manchmal möchte ich eine qualifizierte URL in einer Mail von meiner Knotenanwendung senden. Oder ich möchte den Inhalt eines Phantom-Seitenobjekts festlegen.nodejs express: Hostname mit Port vom req -Objekt

Ich bekomme die vollständige URL wie folgt in meinem Deployment-Setup.

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

jedoch auf die Entwicklung Maschine erzeugt dies in der Regel:

http://localhost/myapp statt off http://localhost:3000/myapp

Ich weiß, wie Sie den Port zu bekommen, aber ich will nicht wie etwas verwenden:

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

Was würde Unsinn wie dies bei der Bereitstellung hinter einem Proxy produzieren.

http://domain.com:3000/myapp

Gibt es eine intelligente Art und Weise die Hostnamen mit Port aus dem Request-Objekt zu erhalten, wenn die App außerhalb eines Proxy laufen?

Antwort

0

Was Sie suchen, ist die X-Forwarded-For header. Es ist der sicherste Weg, die ursprüngliche URL zu erhalten, wenn Sie sich hinter Proxies, Load Balancern usw. befinden. Prüfen Sie, ob dies in Ihrer Anfrage vorhanden ist und ob diese verwendet wird, ansonsten verwenden Sie, was Sie bereits implementiert haben.

Diese express source wird es hilfreich sein:

  • Der Wert req.hostname wird von dem Wert abgeleitet gesetzt in den X-Forwarded-Host-Header, die durch die Kunden oder durch die eingestellt werden können, Proxy.

  • X-Forwarded-Proto kann vom Reverseproxy gesetzt werden, um der App mitzuteilen, ob es sich um https oder http oder einen ungültigen Namen handelt. Dieser Wert wird von req.protocol reflektiert.

  • Die Werte req.ip und req.ips werden mit der Liste der -Adressen von X-Forwarded-For aufgefüllt.

+0

Ja. Ich mache das. Wie erwähnt. Im Einsatz funktioniert alles wie es sein soll. Das Problem besteht nur auf meiner Entwicklungsplattform. Im Moment habe ich localhost: 3000 hardcoded und wechsele dann Kommentare bevor ich zur Versionskontrolle dränge. Es funktioniert, aber es ist nicht elegant, daher die Frage, ob es etwas schlauer möglich ist, dies in der Entwicklung von localhost funktionieren zu lassen, so wie es in der Bereitstellung funktionieren wird. –