1
0
mirror of https://github.com/redis/node-redis.git synced 2025-08-06 02:15:48 +03:00

Fix error messages not being visible in the stack trace of AbortErrors

This commit is contained in:
Ruben Bridgewater
2017-03-09 19:13:04 -03:00
parent e4ce21e12c
commit a2255d7fe2
3 changed files with 22 additions and 7 deletions

View File

@@ -1087,6 +1087,8 @@ exports.RedisClient = RedisClient;
exports.print = utils.print; exports.print = utils.print;
exports.Multi = require('./lib/multi'); exports.Multi = require('./lib/multi');
exports.AbortError = errorClasses.AbortError; exports.AbortError = errorClasses.AbortError;
exports.RedisError = Parser.RedisError;
exports.ParserError = Parser.ParserError;
exports.ReplyError = Parser.ReplyError; exports.ReplyError = Parser.ReplyError;
exports.AggregateError = errorClasses.AggregateError; exports.AggregateError = errorClasses.AggregateError;

View File

@@ -1,42 +1,55 @@
'use strict'; 'use strict';
var util = require('util'); var util = require('util');
var assert = require('assert')
var RedisError = require('redis-parser').RedisError
var ADD_STACKTRACE = false
function AbortError (obj) { function AbortError (obj, stack) {
Error.captureStackTrace(this, this.constructor); assert(obj, 'The options argument is required')
assert.strictEqual(typeof obj, 'object', 'The options argument has to be of type object')
RedisError.call(this, obj.message, ADD_STACKTRACE)
Object.defineProperty(this, 'message', { Object.defineProperty(this, 'message', {
value: obj.message || '', value: obj.message || '',
configurable: true, configurable: true,
writable: true writable: true
}); });
if (stack || stack === undefined) {
Error.captureStackTrace(this, AbortError)
}
for (var keys = Object.keys(obj), key = keys.pop(); key; key = keys.pop()) { for (var keys = Object.keys(obj), key = keys.pop(); key; key = keys.pop()) {
this[key] = obj[key]; this[key] = obj[key];
} }
} }
function AggregateError (obj) { function AggregateError (obj) {
Error.captureStackTrace(this, this.constructor); assert(obj, 'The options argument is required')
assert.strictEqual(typeof obj, 'object', 'The options argument has to be of type object')
AbortError.call(this, obj, ADD_STACKTRACE)
Object.defineProperty(this, 'message', { Object.defineProperty(this, 'message', {
value: obj.message || '', value: obj.message || '',
configurable: true, configurable: true,
writable: true writable: true
}); });
Error.captureStackTrace(this, AggregateError);
for (var keys = Object.keys(obj), key = keys.pop(); key; key = keys.pop()) { for (var keys = Object.keys(obj), key = keys.pop(); key; key = keys.pop()) {
this[key] = obj[key]; this[key] = obj[key];
} }
} }
util.inherits(AbortError, Error); util.inherits(AbortError, RedisError);
util.inherits(AggregateError, AbortError); util.inherits(AggregateError, AbortError);
Object.defineProperty(AbortError.prototype, 'name', { Object.defineProperty(AbortError.prototype, 'name', {
value: 'AbortError', value: 'AbortError',
// configurable: true, configurable: true,
writable: true writable: true
}); });
Object.defineProperty(AggregateError.prototype, 'name', { Object.defineProperty(AggregateError.prototype, 'name', {
value: 'AggregateError', value: 'AggregateError',
// configurable: true, configurable: true,
writable: true writable: true
}); });

View File

@@ -870,7 +870,7 @@ describe('The node_redis client', function () {
client.on('error', function (err) { client.on('error', function (err) {
assert.strictEqual(err.message, 'Protocol error, got "a" as reply type byte. Please report this.'); assert.strictEqual(err.message, 'Protocol error, got "a" as reply type byte. Please report this.');
assert.strictEqual(err, error); assert.strictEqual(err, error);
assert(err instanceof redis.ReplyError); assert(err instanceof redis.ParserError);
// After the hard failure work properly again. The set should have been processed properly too // After the hard failure work properly again. The set should have been processed properly too
client.get('foo', function (err, res) { client.get('foo', function (err, res) {
assert.strictEqual(res, 'bar'); assert.strictEqual(res, 'bar');