Вы можете просто добавить поле в объект Error, например,
var err = new Error('Internal Server error');
err.customField = { someProperty: 'some value'};
console.log(err);
И тогда вы можете бросить его как обычно:
throw err;
Когда вы поймаете ошибку (выше в стеке вызовов), вы можете вытащить настраиваемое поле:
try
{
throw err;
}
catch (e)
{
console.error(e);
console.log(e.customField);
}
Начиная с ES6, вы также можете создать свой собственный класс ошибок:
class MyError extends Error {
constructor(message, customValue) {
super(message);
this.field = customValue;
}
get customField() {
return this.field;
}
set customField(obj) {
this.field = obj;
}
};
var ex = new MyError('Error message', {someProperty: 'some value'});
console.dir(ex);
console.log('My custom error details: ', ex.customField);