具有压缩(gzip,deflate)响应体的http请求 - 无法在nodejs中将body解析为json

时间:2014-08-05 20:54:52

标签: node.js express request gzip deflate

我花了很多时间从nodeJS服务器发出请求。
我的服务是公共服务(我无法控制的服务) 我试图查找解决方案,但我不知道我做错了什么:\

我不知道它的问题,但是回复正文中包含了很少的希伯来语

With this article I tried to solve my problem

Full code from article is here

我很乐意帮助解决我的问题:)

更新:

这是我的新代码:(但仍无效 - 代码中的解释)

var express = require('express');
var app = express();
var port = 3429;

var request = require('request');
var zlib = require('zlib');

新的lib使管道工作起作用:

var needle = require('needle');
然后我们稍微改变一下:

var json = "";
var deflate = zlib.createInflate();
var gunzip = zlib.createGunzip();

// options definitions
var url = 'MY_SERVICE_URL';
var headersOptions = {
    'Accept-Encoding': 'gzip,deflate,sdch' // encoding
    , 'Content-Type': 'text/plain; charset=utf-8' // content type
    , 'Accept-Language': 'en-US,en;q=0.8,he;q=0.6' // language
};
var options = {
    compressed: true
    , headers: headersOptions
};


app.listen(port, function () {
    console.log("Listening on " + port);
      setTimeout(function () {
          needleTest();
      }, 5000);
});

var needleTest = function () {
    needle.get(url, options, function (err, response, body) {
        debugger;
        console.log(response.body);
        response.pipe(gunzip);
        response.pipe(deflate);
    });
};

response.body是:

��{ 
"id" : "39",
"title" : "���",
"data" : []
}

之后: response.pipe(gunzip)和response.pipe(deflate) 它转到zlib方法'结束'

现在的问题是: 回调函数的变量未定义

zlib方法:

/* zlib ===> deflate */
deflate.on('data', function (data) {
    debugger;
    console.log('deflate data');
    console.log(data);
    json += data.toString();
});
deflate.on('end', function (data) {
    debugger;
    console.log('deflate end');
    console.log(data);
    parseJSON(json);
});
deflate.on('error', function (data) {
    debugger;
    console.log('deflate error');
    console.log(data);
});

/* zlib ===> gunzip */
gunzip.on('data', function (data) {
    debugger;
    console.log('gunzip data');
    console.log(data);
    json += data.toString();
});
gunzip.on('end', function (data) {
    debugger;
    console.log('gunzip end');
    console.log(data);
    parseJSON(json);
});
gunzip.on('error', function (data) {
    debugger;
    console.log('gunzip error');
    console.log(data);
});

function parseJSON(json) {
    // do the parse things
}

0 个答案:

没有答案