How to get the full URL in Express?

express, node.js, url

Solution

The protocol is available as `req.protocol`. docs here

- Before express 3.0, the protocol you can assume to be `http` unless you see that `req.get('X-Forwarded-Protocol')` is set and has the value `https`, in which case you know that's your protocol

The host comes from `req.get('host')` as Gopal has indicated

Hopefully you don't need a non-standard port in your URLs, but if you did need to know it you'd have it in your application state because it's whatever you passed to `app.listen` at server startup time. However, in the case of local development on a non-standard port, Chrome seems to include the port in the host header so `req.get('host')` returns `localhost:3000`, for example. So at least for the cases of a production site on a standard port and browsing directly to your express app (without reverse proxy), the `host` header seems to do the right thing regarding the port in the URL.

The path comes from `req.originalUrl` (thanks @pgrassant). Note this DOES include the query string. docs here on req.url and req.originalUrl. Depending on what you intend to do with the URL, `originalUrl` may or may not be the correct value as compared to `req.url`.

Combine those all together to reconstruct the absolute URL.

  var fullUrl = req.protocol + '://' + req.get('host') + req.originalUrl;

Problem

Let's say my sample URL is http://example.com/one/two and I say I have the following route ``` app.get('/one/two', function (req, res) { var url = req.url; } ``` The value of `url` will be `/one/two`. How do I get the full URL in Express? For example, in the case above, I would like to receive `http://example.com/one/two`.

Original source

Related problems