0.2.2 • Published 10 years ago

mycro-error v0.2.2

Weekly downloads
-
License
MIT
Repository
-
Last release
10 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

10 years ago

0.2.1

10 years ago

0.2.0

10 years ago

0.1.0

10 years ago