首页 > 解决方案 > nodejs zlib错误:尝试从数据库解压缩文本数据时无效距离太远

问题描述

我正在使用 nodejs zlib 来解压缩字符串数据。但是从数据库中获取数据时结果总是返回错误。

conn.query("SELECT * FROM nmea_data", function(err, res){
    let panjang = res.length;
    // console.log(panjang)
    if(panjang > 0)
    {
        for(i = 0; i < panjang; i++)
        {
            let datanmea = res[i].nmea.toString()

            let buff = new Buffer.from(datanmea, 'base64')
            //console.log(buff)
            zlib.unzip(buff, function(error, result){
                if(error)
                {
                    console.log(error)
                }
                else
                {
                    console.log(result.toString())
                }
            })
        }
    }
})

当我使用上述代码从数据库中获取压缩数据时,它返回错误

...
Error: invalid distance too far back
    at Zlib.zlibOnError [as onerror] (zlib.js:170:17) {
  errno: -3,
  code: 'Z_DATA_ERROR'
}
Error: invalid distance too far back
    at Zlib.zlibOnError [as onerror] (zlib.js:170:17) {
  errno: -3,
  code: 'Z_DATA_ERROR'
}
Error: invalid distance too far back
    at Zlib.zlibOnError [as onerror] (zlib.js:170:17) {
  errno: -3,
  code: 'Z_DATA_ERROR'
}
Error: invalid distance too far back
    at Zlib.zlibOnError [as onerror] (zlib.js:170:17) {
  errno: -3,
  code: 'Z_DATA_ERROR'
}

...

但是,当我只是将压缩数据复制粘贴到变量时,然后对其进行处理。程序工作。

conn.query("SELECT * FROM nmea_data", function(err, res){
    let panjang = res.length;
    // console.log(panjang)
    if(panjang > 0)
    {
        for(i = 0; i < panjang; i++)
        {
            // let datanmea = res[i].nmea
            let datanmea = `H4sIAAAAAAAAAHWPO27DQAxEe50jlTAFP/stZSNQ4whBAvj+R/FQtrRJ4YUIccl95Mz0sX6vv3c4\nFG
            oQgzmsOyAZnmFamBZYgSdhWiENmhxz7dMJ2w73gKU3QH2/aWdaYQLRqHZwnHDJXH3AHnCQfMaA\npZE2
            VDZaBlzi01IJfxK+HbK5SMpJcM+RskEdHg4YucEYc7kMeNdMo4n6a6yTMYcNwomy+VdWw/Nf\neLcoCZ
            kSGlXll6UFC1X9P7OG5O1NUyTIn68rcB/l7Zi4Ls+CnEApD+Z/CuC4AQAA\n
            `

            let buff = new Buffer.from(datanmea, 'base64')
            //console.log(buff)
            zlib.unzip(buff, function(error, result){
                if(error)
                {
                    console.log(error)
                }
                else
                {
                    console.log(result.toString())
                }
            })
        }
    }
})

这是示例预期输出:

$GPGSV,3,1,12,02,23,293,,05,35,216,,06,26,340,,07,08,143,*79
$GPGSV,3,2,12,09,23,098,,13,09,219,,17,20,018,,19,16,002,*73
$GPGSV,3,3,12,23,00,000,,24,00,000,,28,73,085,,30,30,167,*7E
$GLGSV,3,1,09,06,00,000,,18,00,000,,09,13,316,,16,58,258,*6B
$GLGSV,3,2,09,05,42,170,,20,00,000,,19,03,348,,03,10,043,*6B
$GLGSV,3,3,09,04,51,087,*53
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GNGSA,A,1,,,,,,,,,,,,,,,*00
$GPRMC,,V,,,,,,,,,,N*53
$GPGGA,,,,,,0,,,,,,,,*66

标签: node.jszlib

解决方案


推荐阅读