Node.js 带节点的ZINTERSTORE的动态参数

Node.js 带节点的ZINTERSTORE的动态参数,node.js,redis,node-redis,Node.js,Redis,Node Redis,我正在尝试使用node\u redis从node.js使用redis的ZINTERSTORE命令: //node.js server code var redis = require("redis"); var client = redis.createClient(); // ... omitted code ... exports.searchImages = function(tags, page, callback){ //tags = ["red", "round"]

我正在尝试使用node\u redis从node.js使用redis的ZINTERSTORE命令:

//node.js server code
var redis = require("redis");
var client = redis.createClient();

// ... omitted code ...

exports.searchImages = function(tags, page, callback){

  //tags = ["red", "round"]

  client.ZINTERSTORE("tmp", tags.length, tags.join(' '), function(err, replies){

    //do something

  });
}
但是call client.ZINTERSTORE抛出错误:[error:ERR syntax error]。将标记作为数组而不是使用标记传入。联接“”会引发相同的错误


在哪里可以找到此命令的正确语法?node_redis的源代码将其隐藏在javascript解析器中,但如果不“单步执行”代码,就很难看到发生了什么。使用node.js进行逐步调试有没有好方法?

使用node.js调试Redis客户端有多种方法

首先,您可以依靠Redis monitor功能来记录Redis服务器接收到的每个命令:

> src/redis-cli monitor
OK
1371134499.182304 [0 172.16.222.72:51510] "info"
1371134499.185190 [0 172.16.222.72:51510] "zinterstore" "tmp" "2" "red,round"
您可以看到Redis接收到的zinterstore命令格式不正确

然后,您可以通过在脚本中添加以下行来激活node_redis的调试模式:

redis.debug_mode = true;
它将在运行时输出Redis协议:

Sending offline command: zinterstore
send ncegcolnx243:6379 id 1: *4
$11
zinterstore
$3
tmp
$1
2
$9
red,round

send_command buffered_writes: 0  should_buffer: false
net read ncegcolnx243:6379 id 1: -ERR syntax error
然后,你可以使用。按以下方式在代码中放置调试器断点:

function search(tags, page, callback) {
  debugger;    // breakpoint is here
  client.ZINTERSTORE("tmp", tags.length, tags, function(err, replies){
    console.log(err);
    console.log(replies);
    callback('ok')
  });
}
然后,您可以在调试模式下启动带有节点的脚本:

$ node debug test.js
< debugger listening on port 5858
connecting... ok
break in D:\Data\NodeTest\test.js:1
  1 var redis = require("redis");
  2 var client = redis.createClient( 6379, "ncegcolnx243" );
  3
debug> help
Commands: run (r), cont (c), next (n), step (s), out (o), backtrace (bt), setBreakpoint (sb), clearBreakpoint (cb),
watch, unwatch, watchers, repl, restart, kill, list, scripts, breakOnException, breakpoints, version

debug> cont
break in D:\Data\NodeTest\test.js:8
  6 function search(tags, page, callback) {
  7
  8   debugger;
  9   client.ZINTERSTORE("tmp", tags.length, tags, function(err, replies){
 10     console.log(err);

... use n(ext) and s(tep) commands ...

使用node.js调试Redis客户端有多种方法

首先,您可以依靠Redis monitor功能来记录Redis服务器接收到的每个命令:

> src/redis-cli monitor
OK
1371134499.182304 [0 172.16.222.72:51510] "info"
1371134499.185190 [0 172.16.222.72:51510] "zinterstore" "tmp" "2" "red,round"
您可以看到Redis接收到的zinterstore命令格式不正确

然后,您可以通过在脚本中添加以下行来激活node_redis的调试模式:

redis.debug_mode = true;
它将在运行时输出Redis协议:

Sending offline command: zinterstore
send ncegcolnx243:6379 id 1: *4
$11
zinterstore
$3
tmp
$1
2
$9
red,round

send_command buffered_writes: 0  should_buffer: false
net read ncegcolnx243:6379 id 1: -ERR syntax error
然后,你可以使用。按以下方式在代码中放置调试器断点:

function search(tags, page, callback) {
  debugger;    // breakpoint is here
  client.ZINTERSTORE("tmp", tags.length, tags, function(err, replies){
    console.log(err);
    console.log(replies);
    callback('ok')
  });
}
然后,您可以在调试模式下启动带有节点的脚本:

$ node debug test.js
< debugger listening on port 5858
connecting... ok
break in D:\Data\NodeTest\test.js:1
  1 var redis = require("redis");
  2 var client = redis.createClient( 6379, "ncegcolnx243" );
  3
debug> help
Commands: run (r), cont (c), next (n), step (s), out (o), backtrace (bt), setBreakpoint (sb), clearBreakpoint (cb),
watch, unwatch, watchers, repl, restart, kill, list, scripts, breakOnException, breakpoints, version

debug> cont
break in D:\Data\NodeTest\test.js:8
  6 function search(tags, page, callback) {
  7
  8   debugger;
  9   client.ZINTERSTORE("tmp", tags.length, tags, function(err, replies){
 10     console.log(err);

... use n(ext) and s(tep) commands ...

最后一段代码是我反复尝试的。调试的详细描述非常有价值。非常感谢。最后一段代码是我反复尝试的。调试的详细描述非常有价值。非常感谢。