Заинтересовался я тут проблемой формирования и обработки исключений для сабжевого фреймворка. На стековерфлов имеются некоторые намеки как это можно сделать.
Существует ли элегантный способ?
Вот собственно недорешение:
#!/usr/bin/env node
function defineException(name, parent) {
var _parent = (parent || Error);
var ex = function(message) {
_parent.call(this);
_parent.captureStackTrace(this, this.constructor);
this.name = (this.constructor.name || this._name);
this.message = (message || '');
}
ex.prototype.__proto__ = _parent.prototype;
ex.prototype._parent = _parent;
ex.prototype._name = name;
//return ex;
global[name] = ex;
}
//var EvilError = defineException();
defineException('EvilError');
function lol() {
console.log('lol. start');
throw new EvilError('smth very bad!');
console.log('lol. end');
}
try {
//throw new Error('ololo');
lol();
}
catch (err) {
if (err instanceof EvilError) {
console.log('>:E 13/666');
console.log('name: %s\nmessage: %s\nstack: %s',
err.name, err.message, err.stack);
} else {
console.log('name: %s\nmessage: %s\nstack: %s',
err.name, err.message, err.stack);
}
}