node.jsexpressproxyhostname

nodejs express: hostname with port from the req object


Sometimes I want to sent a qualified URL in a mail from my node application. Or I would like to set the content of a phantom page object.

I get the full URL like this in my deployment setup.

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

However on the development machine this usually produces:

http://localhost/myapp instead off http://localhost:3000/myapp

I know how to get the port but I don't want to use something like:

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

Which would produce nonsense like this in deploy behind a proxy.

http://domain.com:3000/myapp

Is there a smart way to get the hostname with port from the request object if the app runs outside a proxy?


Solution

  • What you are looking for is the X-Forwarded-For header. It is the safest way to get the original url if you are behind proxies, load balancers etc. Check if this exists in your request and if exists use it, otherwise use what you've already implemented.

    This express source it will be helpful: