这是一个NodeJS代码片段,我正在调试。该网址是正确的,并且Postman向其发送GET请求会返回带有以下标题的200 OK
。响应主体是有效的JSON字符串。
Accept-Ranges →bytes
Age →0
Cache-Control →max-age=300
Connection →keep-alive
Content-Encoding →gzip
Content-Length →255
Content-Type →application/json
Date →Tue, 24 Jan 2017 22:37:28 GMT
Expires →Tue, 24 Jan 2017 17:47:43 GMT
Last-Modified →Tue, 24 Jan 2017 01:03:08 GMT
Server →nginx
Vary →Accept-Encoding
Via →1.1 varnish
X-Cache →HIT
X-Cache-Hits →1
X-Served-By →cache-yul8926-YUL
X-Timer →S1485297448.259768,VS0,VE89
我发现res.on('data', function(chunk) {
永远不会被调用,导致body
保持为空。
调用res.on('end', function() {
时body
仍然有长度= 0.任何想法为什么数据回调都没有被调用?
http.get(url, function(res) {
var body = '';
res.on('data', function(chunk) {
body += chunk;
});
res.on('end', function() {
var data = JSON.parse(body);
cb(data, undefined);
});
}).on('error', function(err) {
console.log("Something went wrong");
console.log(err);
});
同样值得一无所知,cb
是在此代码段之外定义的回调函数。
答案 0 :(得分:0)
在jfriend00的可爱建议之后,我发现res.statusCode
是301
(永久移动)。似乎该网站正在重定向到相同的网址,但使用https
协议而不是http
。
使用Postman测试REST API时,没有提到请求被重定向的事实。 Postman显示根据Postman Docs,默认情况下将默认重定向。200
OK响应(???)
我将http
的所有实例替换为https
,效果很好。
https.get(url, function(res) {
var body = '';
res.on('data', function(chunk) {
body += chunk;
});
res.on('end', function() {
var data = JSON.parse(body);
cb(data, undefined);
});
}).on('error', function(err) {
console.log("Something went wrong");
console.log(err);
});