From 38366f627df4b90f4801734e19b38f07733a8660 Mon Sep 17 00:00:00 2001 From: Schuyler Cebulskie Date: Tue, 27 Sep 2016 02:40:29 -0400 Subject: [PATCH] Fix transmitting errors through IPC --- src/sharding/ShardClientUtil.js | 3 ++- src/sharding/ShardingManager.js | 5 +++-- src/util/MakeError.js | 3 +-- src/util/MakePlainError.js | 7 +++++++ 4 files changed, 13 insertions(+), 5 deletions(-) create mode 100644 src/util/MakePlainError.js diff --git a/src/sharding/ShardClientUtil.js b/src/sharding/ShardClientUtil.js index ef09bb529..37a58a6f7 100644 --- a/src/sharding/ShardClientUtil.js +++ b/src/sharding/ShardClientUtil.js @@ -1,4 +1,5 @@ const makeError = require('../util/MakeError'); +const makePlainError = require('../util/MakePlainError'); /** * Helper class for sharded clients spawned as a child process, such as from a ShardingManager @@ -103,7 +104,7 @@ class ShardClientUtil { try { this._respond('eval', { _eval: message._eval, _result: this.client._eval(message._eval) }); } catch (err) { - this._respond('eval', { _eval: message._eval, _error: err }); + this._respond('eval', { _eval: message._eval, _error: makePlainError(err) }); } } } diff --git a/src/sharding/ShardingManager.js b/src/sharding/ShardingManager.js index d288ffe22..66f5d0d4d 100644 --- a/src/sharding/ShardingManager.js +++ b/src/sharding/ShardingManager.js @@ -4,6 +4,7 @@ const EventEmitter = require('events').EventEmitter; const Shard = require('./Shard'); const Collection = require('../util/Collection'); +const makePlainError = require('../util/MakePlainError'); /** * This is a utility class that can be used to help you spawn shards of your Client. Each shard is completely separate @@ -58,11 +59,11 @@ class ShardingManager extends EventEmitter { if (message._sFetchProp) { this.fetchClientValues(message._sFetchProp) .then(results => shard.send({ _sFetchProp: message._sFetchProp, _result: results })) - .catch(err => shard.send({ _sFetchProp: message._sFetchProp, _error: err })); + .catch(err => shard.send({ _sFetchProp: message._sFetchProp, _error: makePlainError(err) })); } else if (message._sEval) { this.broadcastEval(message._sEval) .then(results => shard.send({ _sEval: message._sEval, _result: results })) - .catch(err => shard.send({ _sEval: message._sEval, _error: err })); + .catch(err => shard.send({ _sEval: message._sEval, _error: makePlainError(err) })); } }); } diff --git a/src/util/MakeError.js b/src/util/MakeError.js index 12e8b3203..bbc84dbf8 100644 --- a/src/util/MakeError.js +++ b/src/util/MakeError.js @@ -1,7 +1,6 @@ module.exports = function makeError(obj) { - const err = new Error(obj.message, obj.fileName, obj.lineNumber); + const err = new Error(obj.message); err.name = obj.name; - err.columnNumber = obj.columnNumber; err.stack = obj.stack; return err; }; diff --git a/src/util/MakePlainError.js b/src/util/MakePlainError.js new file mode 100644 index 000000000..b409462b1 --- /dev/null +++ b/src/util/MakePlainError.js @@ -0,0 +1,7 @@ +module.exports = function makePlainError(err) { + const obj = {}; + obj.name = err.name; + obj.message = err.message; + obj.stack = err.stack; + return obj; +};