0

connect.compressミドルウェアを使用してデータを圧縮しようとしている私のコードを見てください。ブラウザでJSON文字列を解析して、解凍されたデータを取得するにはどうすればよいですか。localhost:2080をヒットしようとすると、ページの読み込みエラーが発生します。

クライアントコード

var options = {
host: '127.0.0.1',
port: 2080,
path: "/",
headers:{
'accept-encoding': 'gzip'
}
};
var req = http.request(options, function(res) {
console.log('STATUS: ' + res.statusCode);
console.log('HEADERS: ' + JSON.stringify(res.headers));
var data = '';
res.on('data', function (chunk) {
data += chunk;  
});
res.on('end', function (chunk) {
var data2 = JSON.parse(data);
console.log(data2.app_id);
});
});

サーバーコード

app = connect();
app.use(connect.compress(console.log("compressed data")))
app.use(connectDomain())
.use(connect.query())
.use(connectRoute(function (router) {

router.get('/', function (req, res) {
            var acceptEncoding = req.headers['accept-encoding'];

              if (acceptEncoding.match(/\bdeflate\b/)) {
                    res.setHeader('content-encoding', 'deflate');
              } else if (acceptEncoding.match(/\bgzip\b/)) {
                    res.setHeader('content-encoding', 'gzip');
              }
            console.log(res._headers);  
            res.setHeader('Content-Type', 'application/json');
            res.end('{"app_id": "A3000990"}');
            })
            }))

.use(function(err, req, res, next) {
    res.end(err.message);
  });

http.createServer(app).listen(2080);

ブラウザを制御することはできません。Accept-encoding:gzip、deflateヘッダーを送信するか、送信しません。したがって、connect.compress()を使用して圧縮データを取得できますか。

どんな助けでも本当に役に立ちます

ありがとう

4

1 に答える 1

0

ここにはいくつかの問題があります。

  • Content-Encodingサーバーでヘッダーを設定していますが、connect.compressそのヘッダーも設定する which も使用します。これにより競合が発生する可能性があるため、これらのヘッダーを自分で追加せず、connect.compressすべての圧縮を処理させてください。
  • クライアントで実際に HTTP リクエストを送信するのではなく、追加req.end()します。
  • クライアントで圧縮データを解凍する試みはありません。その方法はここにあります。
于 2013-03-19T10:10:02.147 に答える