301 Redirect with Express

By  on  

If you've created a site using Node.js, there's a great chance you've used the Express framework.  Express has turned into a massive project and for good reason:  it's loaded with useful functionality, an easy API, and massive community support.  On of my recent projects was using Express and I loved it!

One problem I recently needed to solve was creating a 301 redirect from an old staging domain to the new production domain.  Here's how you can create that 301 redirect with Express:

app.use(function forceLiveDomain(req, res, next) {
  // Don't allow user to hit Heroku now that we have a domain
  var host = req.get('Host');
  if (host === 'serviceworker-cookbook.herokuapp.com') {
    return res.redirect(301, 'https://serviceworke.rs/' + req.originalUrl);
  }
  return next();
});

Surprisingly the redirect code is the first argument to redirect instead of the URL.  It's important to call next() at the end of the function or a non-match will make your app hang!

Recent Features

  • By
    fetch API

    One of the worst kept secrets about AJAX on the web is that the underlying API for it, XMLHttpRequest, wasn't really made for what we've been using it for.  We've done well to create elegant APIs around XHR but we know we can do better.  Our effort to...

  • By
    Introducing MooTools Templated

    One major problem with creating UI components with the MooTools JavaScript framework is that there isn't a great way of allowing customization of template and ease of node creation. As of today, there are two ways of creating: new Element Madness The first way to create UI-driven...

Incredible Demos

Discussion

  1. Great code snippet and saved me a ton of time. Thanks!

  2. Joe

    You shouldn’t have the trailing slash after serviceworke.rs. I.e. instead of this:

    res.redirect(301, 'https://serviceworke.rs/' + req.originalUrl);
    

    It should be this:

    res.redirect(301, 'https://serviceworke.rs' + req.originalUrl);
    

    Otherwise it redirects to:

    https://serviceworke.rs//the/path
    

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!