View our GitHub

Please visit sails-docs on GitHub to view documentation on your mobile device.

Edit Page


This method is used to send a 400 ("Bad Request") response back down to the client indicating that the request is invalid. This usually means it contained invalid parameters or headers, or tried to do something impossible based on your app logic.


return res.badRequest();


  • return res.badRequest(data);
  • return res.badRequest(data, pathToView);


Like the other built-in custom response modules, the behavior of this method is customizable.

By default, it works as follows:

  • If the request "wants JSON" (e.g. the request originated from AJAX, WebSockets, or a REST client like cURL), Sails will send the provided error data as JSON. If no data is provided a default response body will be sent (the string "Bad Request").
  • If the request does not "want JSON" (e.g. a URL typed into a web browser), Sails will attempt to serve one of your views.
    • If a specific pathToView was provided, Sails will attempt to use that view.
    • Alternatively if pathToView was not provided, Sails will try to guess an appropriate view (see res.view() for details). If Sails cannot guess a workable view, it will just send JSON.
    • If Sails serves a view, the data argument will be accessible as a view local: data.


Using the default view:

if ( req.param('amount') < 500 )
  return res.badRequest(
    'Transaction limit exceeded. Please try again with an amount less than $500.'

With a custom view:

if ( req.param('amount') < 500 )
  return res.badRequest(
    'Transaction limit exceeded. Please try again with an amount less than $500.',


  • 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).
  • res.badRequest() (like other userland response methods) can be overridden or modified. It runs the response method defined in /responses/badRequest.js, which is bundled automatically in newly generated Sails apps. If a badRequest.js response method does not exist in your app, Sails will implicitly use the default behavior.
  • This method is called automatically if a call to req.validate() fails any of its validation checks.
  • By default, the specified error (err) will be excluded if the app is running in the "production" environment (i.e. process.env.NODE_ENV === 'production').

Is something missing?

If you notice something we've missed or could be improved on, please follow this link and submit a pull request to the sails-docs repo. Once we merge it, the changes will be reflected on the website the next time it is deployed.


We wrote a book!

Get early access to the book
with promotion code: mcneildoc

Get the Book