Redirects ​
Route target redirect ​
You can set up one route to redirect to another route within your app or even to another absolute URL in your config/routes.js.
module.exports.routes = {
'/chat': '/community',
'GET /docs': 'https://docs.sailscasts.com'
}INFO
Learn more about Route target redirect on the Sails docs.
Exit signal redirect ​
You can also set an exit to signal a redirect in your action.
module.exports = {
exits: {
success: {
responseType: 'redirect'
}
},
fn: async function (inputs) {
return '/'
}
}Notice we set the responseType to redirect and then we can return a URL string.
INFO
Learn more about Actions and Controllers on the Sails docs.
303 response code for SPAs ​
When redirecting after a PUT, PATCH, or DELETE request from your SPA, you must use a 303 response code, otherwise the subsequent request will not be treated as a GET request. A 303 redirect is very similar to a 302 redirect; however, the follow-up request is explicitly changed to a GET request.
The Boring Stack provides you with the inertiaRedirect custom response to do that in your controller actions:
module.exports = {
exits: {
success: {
responseType: 'inertiaRedirect'
}
},
fn: async function (inputs) {
return '/users'
}
}INFO
Learn more about 303 response code on the Inertia docs.
External redirects ​
Sometimes it's necessary to redirect to an external website, or even another page in your app that's not an SPA. This can be accomplished using a server-side initiated window.location visit via the inertiaRedirect custom response.
module.exports = {
exits: {
success: {
responseType: 'inertiaRedirect'
}
},
fn: async function (inputs) {
return 'https://sailsjs.com'
}
}The inertiaRedirect custom response will generate a 409 Conflict response if the redirect request is coming from a POST or GET method and include the destination URL in the X-Inertia-Location header. When this response is received client-side, Inertia will automatically perform a window.location = url visit.