Node.JS deflate/gzip响应文本

Node.JS deflate/gzip response text

本文关键字:响应 文本 gzip JS deflate Node      更新时间:2023-09-26

我看到了这里显示的示例

response.writeHead(200, { 'content-encoding': 'deflate' });
raw.pipe(zlib.createDeflate()).pipe(response);

我试图通过创建一个读取流并发送压缩的输出来发送响应。

但我正在寻找一种不用读流的方法,因为我的文本来自另一个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);

那么,是不是只有流才会被处理?

您在使用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);

我不知道我之前犯了什么错误导致它不起作用。我不确定是否有版本冲突导致了问题或其他原因。但最后,上面的代码对我有效;)