Created
September 1, 2014 08:37
-
-
Save cjroth/a359b3586b47441ab151 to your computer and use it in GitHub Desktop.
node/express errors middleware (wip)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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