NodeJS 解析JSON字符串时加载网页时出错

js81xvg6  于 2023-06-05  发布在  Node.js
关注(0)|答案(1)|浏览(192)

请看一下我的代码,我正在尝试使用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 header or it doesn't.那么我们可以使用connect.compress()来获取压缩数据吗?

webghufk

webghufk1#

这里有几个问题:

  • 你在服务器上设置了Content-Encoding头文件,但也使用了connect.compress,它也会设置那个头文件。这可能会产生冲突,所以不要自己添加这些头,让connect.compress处理所有的压缩;
  • 你实际上并没有在你的客户端发送HTTP请求,给它添加req.end();
  • 没有尝试在客户端中解压缩压缩数据;如何做can be found here;

相关问题