0.2.2 • Published 8 years ago

mycro-error v0.2.2

Weekly downloads
-
License
MIT
Repository
-
Last release
8 years ago

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

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

License

Copyright (c) 2016 Chris Ludden. Licensed under the MIT License

0.2.2

8 years ago

0.2.1

8 years ago

0.2.0

8 years ago

0.1.0

8 years ago