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()); 

http://expressjs.com/api.html#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); 

我不知道我之前做了什么错误,导致它不工作。 我不确定是否有版本冲突导致问题或其他事情。 但最后,上面的代码适用于我;)