Sails app
This commit is contained in:
77
config/500.js
Normal file
77
config/500.js
Normal file
@@ -0,0 +1,77 @@
|
||||
/**
|
||||
* Default 500 (Server Error) middleware
|
||||
*
|
||||
* If an error is thrown in a policy or controller,
|
||||
* Sails will respond using this default error handler
|
||||
*
|
||||
* This middleware can also be invoked manually from a controller or policy:
|
||||
* res.serverError( [errors] )
|
||||
*
|
||||
*
|
||||
* @param {Array|Object|String} errors
|
||||
* optional errors
|
||||
*/
|
||||
|
||||
module.exports[500] = function serverErrorOccurred(errors, 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 viewFilePath = '500',
|
||||
statusCode = 500,
|
||||
i, errorToLog, errorToJSON;
|
||||
|
||||
var result = {
|
||||
status: statusCode
|
||||
};
|
||||
|
||||
// Normalize a {String|Object|Error} or array of {String|Object|Error}
|
||||
// into an array of proper, readable {Error}
|
||||
var errorsToDisplay = sails.util.normalizeErrors(errors);
|
||||
for (i in errorsToDisplay) {
|
||||
|
||||
// Log error(s) as clean `stack`
|
||||
// (avoids ending up with \n, etc.)
|
||||
if ( errorsToDisplay[i].original ) {
|
||||
errorToLog = sails.util.inspect(errorsToDisplay[i].original);
|
||||
}
|
||||
else {
|
||||
errorToLog = errorsToDisplay[i].stack;
|
||||
}
|
||||
sails.log.error('Server Error (500)');
|
||||
sails.log.error(errorToLog);
|
||||
|
||||
// Use original error if it exists
|
||||
errorToJSON = errorsToDisplay[i].original || errorsToDisplay[i].message;
|
||||
errorsToDisplay[i] = errorToJSON;
|
||||
}
|
||||
|
||||
// Only include errors if application environment is set to 'development'
|
||||
// In production, don't display any identifying information about the error(s)
|
||||
if (sails.config.environment === 'development') {
|
||||
result.errors = errorsToDisplay;
|
||||
}
|
||||
|
||||
// If the user-agent wants JSON, respond with JSON
|
||||
if (req.wantsJSON) {
|
||||
return res.json(result, result.status);
|
||||
}
|
||||
|
||||
// Set status code and view locals
|
||||
res.status(result.status);
|
||||
for (var key in result) {
|
||||
res.locals[key] = result[key];
|
||||
}
|
||||
// And render view
|
||||
res.render(viewFilePath, result, function (err) {
|
||||
// If the view doesn't exist, or an error occured, just send JSON
|
||||
if (err) { return res.json(result, result.status); }
|
||||
|
||||
// Otherwise, if it can be rendered, the `views/500.*` page is rendered
|
||||
res.render(viewFilePath, result);
|
||||
});
|
||||
|
||||
};
|
||||
Reference in New Issue
Block a user