How to get the Full URL in Express on Node.js

Johnny Simpson - Jun 19 '22 - - Dev Community

In Express running on Node.js, we have access to the request object, and also we can send a response back to the user via the response object. However, we don't have access to a simple way of getting the full URL from the request.

Fortunately, it is quite easy to build the full URL from the request object in Express. Let's look at how it works.

Getting the full URL of a Request in Express

In express, we can display certain content on certain routes like so:

app.get('/page', (req, res, next) => {
    // Show some content to the user
})
Enter fullscreen mode Exit fullscreen mode

Within a route, we can use the req object to get the full URL. The full URL is composed of a few different pieces:

  • the protocol of the current URL
  • the host of the URL (i.e. the domain name)
  • and the page you are on, i.e. /page

To combine all of these from our request, we can run the following:

let fullUrl = req.protocol + '://' + req.get('host') + req.originalUrl;
Enter fullscreen mode Exit fullscreen mode

Note: it is better to use req.get('host'), since it will include the port. So if you're running on localhost:3000, then :3000 will be included. req.hostname only returns the domain, or localhost - which may cause issues for you in the future.

Therefore, a full URL can be found for any page our route, using the following code:

app.get('/page', (req, res, next) => {
    // Show some content to the user
    let fullUrl = req.protocol + '://' + req.get('host') + req.originalUrl;
})
Enter fullscreen mode Exit fullscreen mode
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .