你的var a 是个字符串?
var b = new Zlib.Deflate(plain)
plain = Array.<number>or Uint8Array
所以需要把a变量的字符串转换成 Uint8Array
var uint8array = new TextEncoder("utf-8").encode(a)
所以 再把转换的传人new Zlib.Deflate.
附图Github的官方例子:
我请求管用所结束httpvar http = require("http"),zlib = require("zlib")
function getGzipped(url, callback) {
// buffer to store the streamed decompression
var buffer = []
http.get(url, function(res) {
// pipe the response into the gunzip to decompress
var gunzip = zlib.createGunzip()
res.pipe(gunzip)
gunzip.on('data', function(data) {
// decompression chunk ready, add it to the buffer
buffer.push(data.toString())
}).on("end", function() {
// response and decompression complete, join the buffer and return
callback(null, buffer.join(""))
}).on("error", function(e) {
callback(e)
})
}).on('error', function(e) {
callback(e)
})
}
getGzipped(url, function(err, data) {
console.log(data)
})
2. 尝试添加encoding: null给传递给选项request避免载体转换字符串并保持二进制缓冲区
3. 工作示例(使用节点请求模块)gunzips响应function gunzipJSON(response){
var gunzip = zlib.createGunzip()
var json = ""
gunzip.on('data', function(data){
json += data.toString()
})
gunzip.on('end', function(){
parseJSON(json)
})
response.pipe(gunzip)
}
全码:
4. 像@Iftah说设置encoding: null 完整例(少错误处理):request = require('request')
zlib = require('zlib')
request(url, {encoding: null}, function(err, response, body){
if(response.headers['content-encoding'] == 'gzip'){
zlib.gunzip(body, function(err, dezipped) {
callback(dezipped.toString())
}
} else {
callback(body)
}
})