2013-06-25 15:43:15 +04:00
|
|
|
var _ = require('underscore'),
|
2013-09-15 15:11:47 +04:00
|
|
|
colors = require("colors"),
|
2013-06-25 15:43:15 +04:00
|
|
|
errors;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Basic error handling helpers
|
|
|
|
*/
|
|
|
|
errors = {
|
|
|
|
throwError: function (err) {
|
|
|
|
if (!err) {
|
|
|
|
err = new Error("An error occurred");
|
|
|
|
}
|
2013-05-26 22:51:58 +04:00
|
|
|
|
2013-06-25 15:43:15 +04:00
|
|
|
if (_.isString(err)) {
|
|
|
|
throw new Error(err);
|
|
|
|
}
|
2013-05-26 22:51:58 +04:00
|
|
|
|
2013-06-25 15:43:15 +04:00
|
|
|
throw err;
|
|
|
|
},
|
2013-05-26 22:51:58 +04:00
|
|
|
|
2013-09-15 15:11:47 +04:00
|
|
|
logError: function (err, context, help) {
|
|
|
|
err = err.message || err || "Unknown";
|
2013-06-25 15:43:15 +04:00
|
|
|
// TODO: Logging framework hookup
|
2013-07-16 22:57:19 +04:00
|
|
|
// Eventually we'll have better logging which will know about envs
|
|
|
|
if (process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'staging'
|
|
|
|
|| process.env.NODE_ENV === 'production') {
|
2013-09-15 15:11:47 +04:00
|
|
|
|
|
|
|
console.log("\nERROR:".red, err.red, err.stack || "");
|
|
|
|
|
|
|
|
if (context) {
|
|
|
|
console.log(context);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (help) {
|
|
|
|
console.log(help.green);
|
|
|
|
}
|
|
|
|
// add a new line
|
|
|
|
console.log("");
|
2013-07-16 22:57:19 +04:00
|
|
|
}
|
2013-06-25 15:43:15 +04:00
|
|
|
},
|
2013-05-26 22:51:58 +04:00
|
|
|
|
2013-09-15 15:11:47 +04:00
|
|
|
logErrorAndExit: function (err, context, help) {
|
|
|
|
this.logError(err, context, help);
|
|
|
|
// Exit with 0 to prevent npm errors as we have our own
|
|
|
|
process.exit(0);
|
2013-06-25 15:43:15 +04:00
|
|
|
},
|
2013-05-26 22:51:58 +04:00
|
|
|
|
2013-09-15 15:11:47 +04:00
|
|
|
logAndThrowError: function (err, context, help) {
|
|
|
|
this.logError(err, context, help);
|
2013-05-26 22:51:58 +04:00
|
|
|
|
2013-09-15 15:11:47 +04:00
|
|
|
this.throwError(err, context, help);
|
2013-06-25 15:43:15 +04:00
|
|
|
},
|
2013-05-26 22:51:58 +04:00
|
|
|
|
2013-09-15 15:11:47 +04:00
|
|
|
logErrorWithRedirect: function (msg, context, help, redirectTo, req, res) {
|
2013-06-25 15:43:15 +04:00
|
|
|
var self = this;
|
2013-05-26 22:51:58 +04:00
|
|
|
|
2013-06-25 15:43:15 +04:00
|
|
|
return function () {
|
2013-09-15 15:11:47 +04:00
|
|
|
self.logError(msg, context, help);
|
2013-05-26 22:51:58 +04:00
|
|
|
|
2013-06-25 15:43:15 +04:00
|
|
|
if (_.isFunction(res.redirect)) {
|
|
|
|
res.redirect(redirectTo);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
};
|
2013-05-26 22:51:58 +04:00
|
|
|
|
2013-06-25 15:43:15 +04:00
|
|
|
// Ensure our 'this' context in the functions
|
2013-09-15 15:11:47 +04:00
|
|
|
_.bindAll(errors, "throwError", "logError", "logAndThrowError", "logErrorWithRedirect");
|
2013-05-26 22:51:58 +04:00
|
|
|
|
2013-06-25 15:43:15 +04:00
|
|
|
module.exports = errors;
|