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

hmset throws/errors out on non-string values. fixes #218

This commit is contained in:
DTrejo
2012-06-04 16:13:56 -07:00
parent 7734fb63b4
commit b60e001fa0
3 changed files with 24 additions and 1 deletions

View File

@@ -277,7 +277,7 @@ Output:
Multiple values in a hash can be set by supplying an object: Multiple values in a hash can be set by supplying an object:
client.HMSET(key2, { client.HMSET(key2, {
"0123456789": "abcdefghij", "0123456789": "abcdefghij", // NOTE: the key and value must both be strings
"some manner of key": "a type of value" "some manner of key": "a type of value"
}); });

View File

@@ -898,6 +898,11 @@ RedisClient.prototype.hmset = function (args, callback) {
for (i = 0, il = tmp_keys.length; i < il ; i++) { for (i = 0, il = tmp_keys.length; i < il ; i++) {
key = tmp_keys[i]; key = tmp_keys[i];
tmp_args.push(key); tmp_args.push(key);
if (typeof args[1][key] !== "string") {
var err = new Error("hmset expected value to be a string", key, ":", args[1][key]);
if (callback) return callback(err);
else throw err;
}
tmp_args.push(args[1][key]); tmp_args.push(args[1][key]);
} }
args = tmp_args; args = tmp_args;

18
test.js
View File

@@ -1348,6 +1348,24 @@ tests.OPTIONAL_CALLBACK_UNDEFINED = function () {
client.get("op_cb2", last(name, require_string("y", name))); client.get("op_cb2", last(name, require_string("y", name)));
}; };
tests.HMSET_THROWS_ON_NON_STRINGS = function () {
var name = "HMSET_THROWS_ON_NON_STRINGS";
var hash = name;
var data = { "a": [ "this is not a string" ] };
client.hmset(hash, data, cb);
function cb(e, r) {
assert(e); // should be an error!
}
// alternative way it throws
function thrower() {
client.hmset(hash, data);
}
assert.throws(thrower);
next(name);
};
// TODO - need a better way to test auth, maybe auto-config a local Redis server or something. // TODO - need a better way to test auth, maybe auto-config a local Redis server or something.
// Yes, this is the real password. Please be nice, thanks. // Yes, this is the real password. Please be nice, thanks.
tests.auth = function () { tests.auth = function () {