Ajax nodejshttpget返回空正文

Ajax nodejshttpget返回空正文,ajax,node.js,http,Ajax,Node.js,Http,下面是我正在调试的NodeJS代码片段。url是正确的,对它的GET请求返回带有以下标题的200OK。响应正文是一个有效的JSON字符串 标题(箭头表示列除数) 问题是: 我发现,res.on('data',function(chunk){从未被调用,这会导致body保持为空 当调用res.on('end',函数(){时body的长度仍然为0。知道为什么没有调用数据回调吗 http.get(url, function(res) { var body = ''; res.on('

下面是我正在调试的NodeJS代码片段。url是正确的,对它的GET请求返回带有以下标题的
200OK
。响应正文是一个有效的JSON字符串

标题(箭头表示列除数) 问题是: 我发现,
res.on('data',function(chunk){
从未被调用,这会导致
body
保持为空

当调用
res.on('end',函数(){
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
是在这个代码段之外定义的回调函数。

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

当使用Postman测试REST API时,它没有提到请求被重定向的事实。Postman显示了一个
200
OK响应(???),它将默认为静默地跟随重定向

解决方案: 我用
https
替换了
http
的所有实例,效果非常好

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

在http.get(…).on('error',fn)中添加一个
.on('error',fn)
处理程序,查看是否报告了错误。另外,请检查
res.statusCode
。我实际上忘记了在('error',…)中包含
handler。我更新了问题,将其包括在内。关于
res.statusCode
,这是一个很好的提示-这让我找到了解决问题的正确方向。从“默认情况下,邮递员将在所有301/302响应中自动跟踪位置标题。”谢谢。要是我早点知道就好了。哈哈。那会节省我很多时间。这就是我做假设的原因。
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);
});