Ajax nodejshttpget返回空正文
下面是我正在调试的NodeJS代码片段。url是正确的,对它的GET请求返回带有以下标题的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('
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);
});