我花了很多时间从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
}