73 lines
2.7 KiB
JavaScript
73 lines
2.7 KiB
JavaScript
/**
|
|
* Default 400 (Bad Request) handler
|
|
*
|
|
* Sails will automatically respond using this middleware when a blueprint is requested
|
|
* with missing or invalid parameters
|
|
* (e.g. `POST /user` was used to create a user, but required parameters were missing)
|
|
*
|
|
* This middleware can also be invoked manually from a controller or policy:
|
|
* res.badRequest( [validationErrors], [redirectTo] )
|
|
*
|
|
*
|
|
* @param {Array|Object|String} validationErrors
|
|
* optional errors
|
|
* usually an array of validation errors from the ORM
|
|
*
|
|
* @param {String} redirectTo
|
|
* optional URL
|
|
* (absolute or relative, e.g. google.com/foo or /bar/baz)
|
|
* of the page to redirect to. Usually only relevant for traditional HTTP requests,
|
|
* since if this was triggered from an AJAX or socket request, JSON should be sent instead.
|
|
*/
|
|
|
|
module.exports[400] = function badRequest(validationErrors, redirectTo, req, res) {
|
|
|
|
/*
|
|
* NOTE: This function is Sails middleware-- that means that not only do `req` and `res`
|
|
* work just like their Express equivalents to handle HTTP requests, they also simulate
|
|
* the same interface for receiving socket messages.
|
|
*/
|
|
|
|
var statusCode = 400;
|
|
|
|
var result = {
|
|
status: statusCode
|
|
};
|
|
|
|
// Optional validationErrors object
|
|
if (validationErrors) {
|
|
result.validationErrors = validationErrors;
|
|
}
|
|
|
|
// For requesters expecting JSON, everything works like you would expect-- a simple JSON response
|
|
// indicating the 400: Bad Request status with relevant information will be returned.
|
|
if (req.wantsJSON) {
|
|
return res.json(result, result.status);
|
|
}
|
|
|
|
// For traditional (not-AJAX) web forms, this middleware follows best-practices
|
|
// for when a user submits invalid form data:
|
|
// i. First, a one-time-use flash variable is populated, probably a string message or an array
|
|
// of semantic validation error objects.
|
|
// ii. Then the user is redirected back to `redirectTo`, i.e. the URL where the bad request originated.
|
|
// iii. There, the controller and/or view might use the flash `errors` to either display a message or highlight
|
|
// the invalid HTML form fields.
|
|
if (redirectTo) {
|
|
|
|
// Set flash message called `errors` (one-time-use in session)
|
|
req.flash('errors', validationErrors);
|
|
|
|
// then redirect back to the `redirectTo` URL
|
|
return res.redirect(redirectTo);
|
|
}
|
|
|
|
|
|
// Depending on your app's needs, you may choose to look at the Referer header here
|
|
// and redirect back. Please do so at your own risk!
|
|
// For security reasons, Sails does not provide this affordance by default.
|
|
// It's safest to provide a 'redirectTo' URL and redirect there directly.
|
|
|
|
// If `redirectTo` was not specified, just respond w/ JSON
|
|
return res.json(result, result.status);
|
|
|
|
}; |