node.js - 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
解决方案
推荐阅读
- java - 如果 jar 需要外部文件,Desktop.getDesktop().open(file) 不起作用
- android - 当getText为空时按下“=”按钮时应用程序崩溃 - Android Studio
- java - 为什么 1dp 在 Android 上同时表示 3px 和 2px?
- c# - 如何修复 Listview 和 Mysql 重复?
- c++ - if-else 语句只能按特定顺序工作,我不知道为什么
- android - 片段主题不适用
- .net - 关于 .Net 框架与我的桌面应用程序的兼容版本
- php - 如何在此代码中设置最低订单价格
- azure - 在 dev 上手动触发基于时间的 Azure Functions
- c# - 组合匿名类型