Skip to content

Instantly share code, notes, and snippets.

@cjroth
Created September 1, 2014 08:37
Show Gist options
  • Save cjroth/a359b3586b47441ab151 to your computer and use it in GitHub Desktop.
Save cjroth/a359b3586b47441ab151 to your computer and use it in GitHub Desktop.
node/express errors middleware (wip)
var util = require('util');
var loggly = require('../services/loggly');
function middleware() {
return function(err, req, res, next) {
if (!util.isError(err)) {
var error = new Error();
if (typeof err === 'number') {
error.status = err;
} else {
error.message = err;
}
err = error;
}
err.status = err.status || 500;
res.status(err.status);
var data = {
message: err.message,
stack: err.stack,
status: err.status,
user: req.user ? req.user.id : null,
url: req.url,
body: req.body,
};
if (req.app.get('env') === 'production') {
loggly.log(data, ['server'], function(err, result) {
if (err) console.error(err);
});
}
if (err.status >= 500) {
console.error(err.stack);
}
if (!req.accepts('html')) {
res.json(toJSON(err));
return;
}
res.locals.err = err;
res
.status(err.status)
.render('error');
};
}
function toJSON(err) {
if (typeof err.message === 'object') return err.message;
return { form: [err.message] };
}
function ahh(status, message) {
var err = new Error();
err.status = status;
err.message = message;
return err;
}
module.exports.middleware = middleware;
module.exports.ahh = ahh;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment