Today I will present you one of my favorite NPM modules. VError makes your errors more explicit.
I will not expose all the features here and just explain why I think this module is very useful. So don't hesitate to read the official documentation here
The thing I like with VError is the feature of building a composite error message through all applicative layers the error goes through.
Let see an example :
const VError = require('verror') function model(json) { return JSON.parse(json) } function controller(json) { try { model(json) } catch (err) { const error = new VError(err, 'Model fail to parse json') throw error } } function routeHandler(rawJSON) { try { const data = controller(rawJSON) return data } catch (err) { const error = new VError(err, 'Controller fail to use json') throw error } } routeHandler('invalid json') This script will generate the following error message :
VError: Controller fail to use json: Model fail to parse json: Unexpected token i in JSON at position 0
This is much more explicit to see than : SyntaxError: Unexpected token i in JSON at position 0
Also you can add some contextual information for each VError layers and get them at the end with the VError.info() function see documentation here
Examples :
const error = new VError({ name: 'SERVICE_UNAVAILABLE', info: { json: rawJSON }, cause: err, }, 'Controller fail to use json') console.log(VError.info(error)) // { json: 'invalid json' } console.log(error.name) // SERVICE_UNAVAILABLE Let me know in the comments if you use it already or if you will in the future and what are your feedbacks about VError.
Top comments (1)
i want to use this to throw & rethrow multi-level / multi-module errors , exclusively for retaining stacktrace.
brief summary:
I have 3-4 modules , and a custom error type.
if an error happens in module 4, i want to bubble the same to module 2 with the stack trace intact.
will this work for me ? are there any examples for this ?