Skip to content

Commit

Permalink
Support creating custom errors based on the super-error library, add …
Browse files Browse the repository at this point in the history
…tests, add example
  • Loading branch information
StarpTech committed Mar 19, 2017
1 parent 2e03d73 commit e2c4ed2
Show file tree
Hide file tree
Showing 6 changed files with 521 additions and 44 deletions.
27 changes: 27 additions & 0 deletions examples/custom-errors.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
'use strict'

const Hemera = require('./../packages/hemera')
const nats = require('nats').connect()

const hemera = new Hemera(nats)

hemera.ready(() => {
const UnauthorizedError = Hemera.createError('Unauthorized')

hemera.add({
topic: 'math',
cmd: 'add'
}, function (req, cb) {
const err = new UnauthorizedError('Unauthorized action')
cb(err)
})

hemera.act({
topic: 'math',
cmd: 'add',
a: 1,
b: 2
}, function (err, resp) {
console.log(err.cause.name, err.cause.message)
})
})
2 changes: 1 addition & 1 deletion packages/hemera/build/errors.js.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

75 changes: 60 additions & 15 deletions packages/hemera/build/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/hemera/build/index.js.map

Large diffs are not rendered by default.

67 changes: 53 additions & 14 deletions packages/hemera/lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import _ from 'lodash'
import Pino from 'pino'
import OnExit from 'signal-exit'
import TinySonic from 'tinysonic'
import SuperError from 'super-error'

import Errors from './errors'
import Constants from './constants'
Expand Down Expand Up @@ -381,6 +382,17 @@ class Hemera extends EventEmitter {
process.exit(1)
}

/**
*
*
* @readonly
*
* @memberOf Hemera
*/
static createError () {
return SuperError.subclass.apply(SuperError, arguments)
}

/**
*
*
Expand Down Expand Up @@ -456,14 +468,19 @@ class Hemera extends EventEmitter {
function onServerPreResponseHandler (err, value) {
const self = this

// check if an error was already catched
// check if an error was already wrapped
if (self._response.error) {
self.emit('serverResponseError', self._response.error)
self.log.error(self._response.error)
} else if (err) { // check for an extension error
let error = new Errors.HemeraError(Constants.EXTENSION_ERROR).causedBy(err)
self.emit('serverResponseError', error)
self._response.error = error
if (err instanceof SuperError) {
// try to get rootCause then cause and last the thrown error
self._response.error = new Errors.HemeraError(Constants.EXTENSION_ERROR).causedBy(err.rootCause || err.cause || err)
} else {
self._response.error = new Errors.HemeraError(Constants.EXTENSION_ERROR).causedBy(err)
}

self.emit('serverResponseError', self._response.error)
self.log.error(self._response.error)
}

Expand Down Expand Up @@ -530,9 +547,18 @@ class Hemera extends EventEmitter {
const self = this

if (err) {
self._response.error = new Errors.BusinessError(Constants.BUSINESS_ERROR, {
pattern: self._pattern
}).causedBy(err)
if (err instanceof SuperError) {
// try to get rootCause then cause and last the thrown error
self._response.error = new Errors.BusinessError(Constants.BUSINESS_ERROR, {
pattern: self._pattern,
app: self._config.name
}).causedBy(err.rootCause || err.cause || err)
} else {
self._response.error = new Errors.BusinessError(Constants.BUSINESS_ERROR, {
pattern: self._pattern,
app: self._config.name
}).causedBy(err)
}

return self.finish()
}
Expand All @@ -556,7 +582,13 @@ class Hemera extends EventEmitter {
const self = this

if (err) {
self._response.error = new Errors.HemeraError(Constants.EXTENSION_ERROR).causedBy(err)
if (err instanceof SuperError) {
// try to get rootCause then cause and last the thrown error
self._response.error = new Errors.HemeraError(Constants.EXTENSION_ERROR).causedBy(err.rootCause || err.cause || err)
} else {
self._response.error = new Errors.HemeraError(Constants.EXTENSION_ERROR).causedBy(err)
}

self.log.error(self._response.error)

return self.finish()
Expand All @@ -577,9 +609,13 @@ class Hemera extends EventEmitter {
}, (err) => {
// middleware error
if (err) {
let error = new Errors.HemeraError(Constants.ADD_MIDDLEWARE_ERROR).causedBy(err)
self.log.error(error)
self._response.error = error
if (err instanceof SuperError) {
// try to get rootCause then cause and last the thrown error
self._response.error = new Errors.HemeraError(Constants.ADD_MIDDLEWARE_ERROR).causedBy(err.rootCause || err.cause || err)
} else {
self._response.error = new Errors.HemeraError(Constants.ADD_MIDDLEWARE_ERROR).causedBy(err)
}
self.log.error(self._response.error)
return self.finish()
}

Expand Down Expand Up @@ -615,9 +651,12 @@ class Hemera extends EventEmitter {
let self = this

if (err) {
let error = new Errors.HemeraError(Constants.EXTENSION_ERROR).causedBy(err)
self.log.error(error)
self._response.error = error
if (err instanceof SuperError) {
// try to get rootCause then cause and last the thrown error
self._response.error = new Errors.HemeraError(Constants.EXTENSION_ERROR).causedBy(err.rootCause || err.cause || err)
} else {
self._response.error = new Errors.HemeraError(Constants.EXTENSION_ERROR).causedBy(err)
}

return self.finish()
}
Expand Down
Loading

0 comments on commit e2c4ed2

Please sign in to comment.