Node.JS deflate / gzip响应文本
我看到这里显示的例子
response.writeHead(200, { 'content-encoding': 'deflate' }); raw.pipe(zlib.createDeflate()).pipe(response);
我尝试通过创build一个读取stream并发送泄漏的输出来发送响应。
但我正在寻找一种方法来做到不读stream,因为我有来自另一个HTTP
请求的文本。 我只是用来response.write(text);
我尝试了几个包括
zlib.deflate(text, function (err, buffer) { if (err) throw err; response.write(buffer); response.end(); });
但浏览器说invalid or unsupported form of compression.
我究竟做错了什么?
connect
的代码说
return stream ? stream.write(new Buffer(chunk, encoding)) : write.call(res, chunk, encoding);
那么就像只有stream将被处理?
你使用Express吗? 如果是这样,只需使用compress
中间件:
app.use(express.compress());
所以,我设法解决了这个问题。 这是代码
var zlib = require('zlib'); var connect = require('connect'); var fs = require('fs'); var server = connect() // .use(connect.compress()) It didn't work either .use(function (req, res, next) { var text = fs.readFileSync('test.js'); zlib.deflate(text, function (err, buffer) { if (err) throw err; res.writeHead(200, { 'Content-Encoding': 'deflate', 'Content-Type': 'text/javascript' }); res.end(buffer); }); }) .listen(1337);
我不知道我之前做了什么错误,导致它不工作。 我不确定是否有版本冲突导致问题或其他事情。 但最后,上面的代码适用于我;)