mycro-error
v0.2.2
Published
error handling service for mycro apps
Downloads
1
Readme
mycro-error
a mycro hook that provides an error
service with utility error handling methods.
Install
install
npm install --save mycro-error
add to hooks
// in config/hooks.js
module.exports = {
// ..
'services',
'mycro-error',
// ..
}
Getting Started
Add a custom notifier. By default, the only notifier enabled is a logger
notifier
// hooks/bugsnag.js
var bugsnag = require('bugsnag');
module.exports = function(done) {
let mycro = this;
bugsnag.register(/* stuff */);
mycro.services.error.addNotifier(bugsnag.notify);
done();
}
Handle an error
let errorService = mycro.services.error;
// ..
if (err) {
errorService.notify(err);
}
Intercept an error
// default functionality
somethingAsync(errorService.intercept(function(err, val) {
// if an error occurred, all notifiers will be called with the
// error, and the error will be available for additional handling here
}));
// prevent the callback from executing
somethingAsync(errorService.intercept(true, function(val) {
// if an error occurred, all notifiers will be called with the
// error, and this callback will never be called.
}));
Add a custom error response handler
errorService.responseHandler = function(res, error) {
// inspect the error or serialize it
res.json(500, {errors: [error]});
}
Intercept a response handler
async.waterfall([
function findData(fn) {
// ..
},
function processData(data, fn) {
// ..
}
], errorService.interceptResponse(res, function(data) {
res.json(200, {data: data});
}));
Define your applications errors in a config file
// in config/errors.js
module.exports = {
badRequest: {
status: 400,
title: 'Bad Request'
},
query: {
status: 500,
title: 'Database Query Error'
}
}
Convert errors into defined errors
Posts.find({ published: true }, function(err, posts) {
if (err) {
err = errorService.get('query', err.message);
console.log(err); // { status: 500, title: 'Database Query Error', detail: 'ECONNECT'}
}
});
Or, better yet, wrap your callbacks
joi.validate(req.body, schema, errorService.wrap('badRequest', function(err, data) {
if (err) {
console.log(err); // { status: 400, title: 'Bad Request', detail: 'Child \'attr\' fails because \'attr\' is required'}
}
}));
And, you can even call your notifiers with the raw error first
Posts.find({ published: true }, errorService.wrap(true, 'query', function(err, posts) {
if (err) {
console.log(err); // { status: 500, title: 'Database Query Error', detail: 'ECONNECT'}
}
}));
Testing
run the test suite
npm test
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request
License
Copyright (c) 2016 Chris Ludden. Licensed under the MIT License