使 Node.js Redis 客户端的 .multi() 和 .batch() 在结果中返回错误以进行测试
Posted
技术标签:
【中文标题】使 Node.js Redis 客户端的 .multi() 和 .batch() 在结果中返回错误以进行测试【英文标题】:Make Node.js Redis client's .multi() and .batch() return errors in results for testing purposes 【发布时间】:2017-08-30 05:01:32 【问题描述】:我可以从 Node.js Redis 客户端读取docs:
如果您的代码包含语法错误,则会引发 EXECABORT 错误,并且将中止所有命令。该错误包含一个包含具体错误的 .errors 属性。如果所有命令都已成功排队,并且 redis 在处理命令时抛出错误,则错误将在结果数组中返回!除了一次失败之外,没有其他命令会被中止。
如何编写 Node.js Redis 客户端的 .multi()
和 .batch()
以便在测试结果中出现错误?
【问题讨论】:
【参考方案1】:不确定它是否仍然与您相关,但以下代码会为 MULTI 产生 EXECABORT 错误。 PS。我不是 nodejs 开发者:)
代码:
var redis = require("redis"),
client = redis.createClient();
client.sadd("bigset", "a member");
client.sadd("bigset", "another member");
set_size = 20;
while (set_size > 0)
client.sadd("bigset", "member " + set_size);
set_size -= 1;
// multi chain with an individual callback
client.multi()
.scard("bigset")
.smembers("bigset")
.set("a")
.keys("*", function (err, replies)
// NOTE: code in this callback is NOT atomic
// this only happens after the the .exec call finishes.
client.mget(replies, redis.print);
)
.dbsize()
.exec(function (err, replies)
// console.log("MULTI got " + replies.length + " replies");
// replies.forEach(function (reply, index)
// console.log("Reply " + index + ": " + reply.toString());
// );
console.log(replies);
console.log(err);
client.quit();
);
输出:
未定义
[ReplyError: EXECABORT Transaction 被丢弃,因为之前 错误。] 命令:'EXEC',代码:'EXECABORT',错误:[ [ReplyError: ERR 'set' 命令的参数数量错误] 命令: 'SET',参数:[对象],代码:'ERR',位置:2 ]
说明:SET 命令有 2 个参数。我只给了一个并将错误打印到控制台。
有关该主题的详细说明在this 问题中。请参阅 BridgeAR 的最后一条评论。
取自nodejs git repo的示例代码
【讨论】:
以上是关于使 Node.js Redis 客户端的 .multi() 和 .batch() 在结果中返回错误以进行测试的主要内容,如果未能解决你的问题,请参考以下文章
express,用于浏览器客户端和 node.js 客户端的 socket.io 服务器
来自连接到 Node.js API 的移动客户端的社交身份验证