2

ここに示されている例を見ました

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

ストリームだけが処理されるようなものですか?

4

2 に答える 2

1

エクスプレスを使用していますか?その場合は、compressミドルウェアを使用してください。

app.use(express.compress());

http://expressjs.com/api.html#compress

于 2013-02-22T07:48:15.323 に答える
0

それで、私は問題を解決することができました。ここにコードがあります

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

以前にどのような間違いを犯したために機能しなかったのかわかりません。バージョンの競合が問題の原因なのか、それとも何か他の原因なのかはわかりません。しかし、最後に、上記のコードは私にとってはうまくいきます;)

于 2013-02-22T11:28:19.587 に答える