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

Don't throw on invalid data types but throw a warning instead

Fixes #1013
This commit is contained in:
Ruben Bridgewater
2016-03-21 17:15:12 +01:00
parent ddbb94b598
commit db6cf0a3b5
2 changed files with 19 additions and 12 deletions

View File

@@ -805,7 +805,7 @@ RedisClient.prototype.send_command = function (command, args, callback) {
'Please handle this in your code to make sure everything works as you intended it to.' 'Please handle this in your code to make sure everything works as you intended it to.'
); );
args_copy[i] = 'null'; // Backwards compatible :/ args_copy[i] = 'null'; // Backwards compatible :/
} else { } else if (Buffer.isBuffer(args[i])) {
args_copy[i] = args[i]; args_copy[i] = args[i];
command_obj.buffer_args = true; command_obj.buffer_args = true;
big_data = true; big_data = true;
@@ -813,6 +813,13 @@ RedisClient.prototype.send_command = function (command, args, callback) {
this.pipeline += 2; this.pipeline += 2;
this.writeDefault = this.writeBuffers; this.writeDefault = this.writeBuffers;
} }
} else {
this.warn(
'Deprecated: The ' + command.toUpperCase() + ' command contains a argument of type ' + args[i].constructor.name + '.\n' +
'This is converted to "' + args[i].toString() + '" by using .toString() now and will return an error from v.3.0 on.\n' +
'Please handle this in your code to make sure everything works as you intended it to.'
);
args_copy[i] = args[i].toString(); // Backwards compatible :/
} }
} else if (typeof args[i] === 'undefined') { } else if (typeof args[i] === 'undefined') {
this.warn( this.warn(

View File

@@ -45,22 +45,22 @@ describe("The 'hset' method", function () {
}); });
}); });
it('throws a error if someone passed a array either as field or as value', function (done) { it('warns if someone passed a array either as field or as value', function (done) {
var hash = "test hash"; var hash = "test hash";
var field = "array"; var field = "array";
// This would be converted to "array contents" but if you use more than one entry, // This would be converted to "array contents" but if you use more than one entry,
// it'll result in e.g. "array contents,second content" and this is not supported and considered harmful // it'll result in e.g. "array contents,second content" and this is not supported and considered harmful
var value = ["array contents"]; var value = ["array contents"];
try { client.on('warning', function (msg) {
client.HMSET(hash, field, value); assert.strictEqual(
throw new Error('test failed'); msg,
} catch (err) { 'Deprecated: The HMSET command contains a argument of type Array.\n' +
if (/invalid data/.test(err.message)) { 'This is converted to "array contents" by using .toString() now and will return an error from v.3.0 on.\n' +
done(); 'Please handle this in your code to make sure everything works as you intended it to.'
} else { );
done(err); done();
} });
} client.HMSET(hash, field, value);
}); });
it('does not error when a buffer and date are set as values on the same hash', function (done) { it('does not error when a buffer and date are set as values on the same hash', function (done) {