Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 无法解压缩存储在nodejs中redis中的压缩数据&引用;Z“数据错误”;_Node.js_Node Redis - Fatal编程技术网

Node.js 无法解压缩存储在nodejs中redis中的压缩数据&引用;Z“数据错误”;

Node.js 无法解压缩存储在nodejs中redis中的压缩数据&引用;Z“数据错误”;,node.js,node-redis,Node.js,Node Redis,我使用msgpack5对JSON对象进行编码,并使用zlib.gzip将其压缩并存储在节点redis列表中 代码如下: zlib.gzip(msgpack.encode(data), function(err, compressedData) { if (err) { return callback(err); } var suffix = "fetch"; var listHead = userId + ":" + suffix; return redis.lpu

我使用msgpack5对JSON对象进行编码,并使用zlib.gzip将其压缩并存储在节点redis列表中

代码如下:

zlib.gzip(msgpack.encode(data), function(err, compressedData) {
  if (err) {
    return callback(err);
  }
  var suffix = "fetch";
  var listHead =  userId + ":" + suffix;
  return redis.lpush(listHead, compressedData, callback);
});
这完全行得通。我使用:

lrange(listHead, 0, -1, function(err, values) 
去拿名单

但以下代码不起作用:

  compressedData = new Buffer(compressedData);   
  zlib.gunzip(compressedData, function(err, unzippedObj) {
      if (err) {
        return callback(err);
      }
    return callback(null, msgpack.decode(unzippedObj));
  });
其中,
CompressedData
是redis中列表的每个值

此代码生成:

 {"errno":-3,"code":"Z_DATA_ERROR"}

当我在放入redis列表之前和之后记录压缩数据时,它输出相同的缓冲区。请帮助。

我不确定
节点redis
是否正确,但在
ioredis
中,您必须使用特殊方法获取缓冲区,如
redis.getBuffer()
我正在将获取的字符串转换为缓冲区,然后尝试解压缩。这行不通,有什么解决办法吗?