NodeJS HTTP GET返回空体

时间:2017-01-24 23:02:28

标签: ajax node.js http

这是一个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是在此代码段之外定义的回调函数。

1 个答案:

答案 0 :(得分:0)

在jfriend00的可爱建议之后,我发现res.statusCode301(永久移动)。似乎该网站正在重定向到相同的网址,但使用https协议而不是http

使用Postman测试REST API时,没有提到请求被重定向的事实。 Postman显示200 OK响应(???)根据Postman Docs,默认情况下将默认重定向。

解决方案:

我将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);
});