diff --git a/index.js b/index.js index 98b2267c15..c4ffba1923 100644 --- a/index.js +++ b/index.js @@ -91,8 +91,8 @@ RedisClient.prototype.install_stream_listeners = function() { self.reply_parser.execute(buffer_from_socket); }); - this.stream.on("error", function (msg) { - self.on_error(msg.message); + this.stream.on("error", function (err) { + self.on_error(err); }); this.stream.on("close", function () { @@ -148,19 +148,18 @@ RedisClient.prototype.flush_and_error = function (error) { this.command_queue = new Queue(); }; -RedisClient.prototype.on_error = function (msg) { +RedisClient.prototype.on_error = function (err) { if (this.closing) { return; } - var message = "Redis connection to " + this.address + " failed - " + msg; + err.message = "Redis connection to " + this.address + " failed - " + err.message; - debug(message); + debug(err.message); this.connected = false; this.ready = false; - - this.emit("error", new Error(message)); + this.emit("error", err); // "error" events get turned into exceptions if they aren't listened for. If the user handled this error // then we should try to reconnect. this.connection_gone("error"); @@ -346,7 +345,8 @@ RedisClient.prototype.on_info_cmd = function (err, res) { var line, retry_time, parts, sub_parts; if (err) { - return self.emit("error", new Error("Ready check failed: " + err.message)); + err.message = "Ready check failed: " + err.message; + return self.emit("error", err); } for (i = 0; i < lines.length; i++) { diff --git a/test/node_redis.spec.js b/test/node_redis.spec.js index cfdb8f6b25..3a90a94419 100644 --- a/test/node_redis.spec.js +++ b/test/node_redis.spec.js @@ -765,6 +765,12 @@ describe("The node_redis client", function () { assert(i, 3); assert.strictEqual(client.offline_queue.length, 0); done(); + } else { + assert.equal(err.code, 'ECONNREFUSED'); + assert.equal(err.errno, 'ECONNREFUSED'); + assert.equal(err.syscall, 'connect'); + assert.equal(err.address, '127.0.0.1'); + assert.equal(err.port, 9999); } }); @@ -785,7 +791,7 @@ describe("The node_redis client", function () { }); describe('false', function () { - it("does emit an error and does not enqueues operation", function (done) { + it("emit an error and does not enqueues operation", function (done) { var client = redis.createClient(9999, null, { parser: parser, max_attempts: 0, @@ -840,6 +846,12 @@ describe("The node_redis client", function () { if (/Redis connection in broken state:/.test(err.message)) { assert.equal(client.command_queue.length, 0); done(); + } else { + assert.equal(err.code, 'ECONNREFUSED'); + assert.equal(err.errno, 'ECONNREFUSED'); + assert.equal(err.syscall, 'connect'); + assert.equal(err.address, '127.0.0.2'); + assert.equal(err.port, 6370); } }); });