res.redirect()

Redirect the requesting user-agent to the given absolute or relative url.

Usage

return res.redirect(url);

Arguments

Argument Type Details
1 url ((string)) A URL expression (see below for complete specification).
e.g. "http://google.com" or "/login"

Details

Sails/Express/Koa/Connect support a few forms of redirection, first being a fully qualified URI for redirecting to a different domain:

return res.redirect('http://google.com');

The second form is the domain-relative redirect. For example, if you were on http://example.com/admin/post/new, the following redirect to /admin would land you at http://example.com/admin:

return res.redirect('/checkout');

Pathname relative redirects are also possible. If you were on http://example.com/admin/post/new, the following redirect would land you at http//example.com/admin/post:

return res.redirect('..');

The final special-case is a back redirect, which allows you to redirect a request back where it came from using the "Referer" (or "Referrer") header (if omitted, redirects to / by default)

return res.redirect('back');

Notes

  • This method is terminal, meaning it is generally the last line of code your app should run for a given request (hence the advisory usage of return throughout these docs).
  • When your app calls res.redirect(), Sails sends a response with status code 302. This instructs the user-agent to send a new request to the indicated URL. There is no way to force a user-agent to follow redirects, but most clients play nicely.
  • In general, you should not need to use res.redirect() if a request "wants JSON" (i.e. req.wantsJSON).
  • If a request originated from a Socket.io client, it always "wants JSON". If you do call res.redirect(/#/documentation/reference/res/res.redirect.html) for a socket request, Sails reroutes the request internally on the server, effectively "forcing" the redirect to take place (i.e. instead of sending a 302 status code, the server simply creates a new request to the redirect URL).
    • As a result, redirects to external domains are not supported for socket requests (although this is technically possible by proxying).
    • This behavior may change to more closely reflect HTTP in future versions of Sails.