From 5b0f710c27c104dfa21f15abd9a168be920a6cef Mon Sep 17 00:00:00 2001 From: Nicolas Bonduel Date: Mon, 27 Jan 2020 11:09:48 +0100 Subject: [PATCH] Better error handling. --- src/collection/objects/_objects.js | 2 +- src/collection/resources/_resources.js | 2 +- src/utils/error.js | 14 +++++++++++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/collection/objects/_objects.js b/src/collection/objects/_objects.js index a7ecef0..9b01d6d 100644 --- a/src/collection/objects/_objects.js +++ b/src/collection/objects/_objects.js @@ -59,7 +59,7 @@ class Component { }).then((res) => { const obj = parseJson(res, ResConstructor, json); return Promise.resolve({ res, obj }); - }).catch((err) => Promise.reject(err)); + }).catch((err) => Promise.reject(new Error.BadRequest(err))); } catch (err) { return Promise.reject(err); } diff --git a/src/collection/resources/_resources.js b/src/collection/resources/_resources.js index 007df31..7483442 100644 --- a/src/collection/resources/_resources.js +++ b/src/collection/resources/_resources.js @@ -46,7 +46,7 @@ class Components { }).then((res) => { const obj = parseJson(res, ResConstructor, json); return Promise.resolve({ res, obj }); - }).catch((err) => Promise.reject(err)); + }).catch((err) => Promise.reject(new Error.BadRequest(err))); } catch (err) { return Promise.reject(err); } diff --git a/src/utils/error.js b/src/utils/error.js index c427bba..9f5c8c3 100644 --- a/src/utils/error.js +++ b/src/utils/error.js @@ -1,9 +1,14 @@ /* eslint-disable max-classes-per-file */ class ExtendableError extends Error { - constructor(message) { + constructor(message, metadata) { super(); this.message = message; this.name = this.constructor.name; + Object.entries(metadata).forEach(([key, value]) => { + if (!this[key]) { + this[key] = value; + } + }); } } @@ -31,9 +36,16 @@ class AbstractClass extends ExtendableError { } } +class BadRequest extends ExtendableError { + constructor(requestError) { + super(requestError.response.body.message || 'Bad request', requestError); + } +} + module.exports = { MethodNeedsId, AbstractClass, MethodNeedsArg, NotImplemented, + BadRequest, };