It's nice to be able to distinguish error types by classes. But it's a bit tricky to correctly create a custom error class in Node.js, so here is an example.
The example also shows how to add an extra parameter called extra
that will be stored as a property on the error.
var CustomError = require('./errors/custom-error');
function doSomethingBad() {
throw new CustomError('It went bad!', 42);
}
- Name appears once - less editing if you have to create lots of custom error classes
- Easy to subclass - just change the last line to inherit from another custom error class you created
- Correct stack trace - no extra stack frames, no double capturing of the stack trace
These are some things that I've seen in other proposed solutions that you should avoid.
Error.call(this)
- creates another error object (wasting a bunch of time) and doesn't touchthis
at allError.captureStackTrace(this, arguments.callee);
- works, butarguments.callee
is deprecated, so don't use itthis.stack = (new Error).stack
- this... I don't even...
In Node 7.1 and TypeScript, this works:
Updated:
this features was added in typescript 2.1, so this implementation is better (see also below comment):