我只是想向API发送get请求。我得到200响应,但没有一个回调函数似乎发生,包括结束。 这是相关部分,我还有快速服务器的其余部分,服务器正在运行。
var https = require("https");
https.get("https://tfe-opendata.com/api/v1/stops", function(res){
console.log("Response: ", res.statusCode);
console.log("Res: " + res);
}).on('data', function(data) {
console.log('blah');
console.log("data: " + data);
process.stdout.write(data);
}).on('error', function(error) {
console.error('Error ' + error);
}).on('end', function(){
console.log("End.");
});
它应该只返回JSON,如果你转到address,你可以看到数据和网址是有效的。 第一次回调发生后没有任何打印。
编辑:如果我使用完整的https.request方法
,它会起作用var options = {
host: 'tfe-opendata.com',
path: '/api/v1/stops',
method: 'GET'
}
var httpreq = https.request(options, function(response) {
response.on('data', function(chunk) {
console.log("data " + chunk);
});
});
httpreq.on('error', function(e) {
console.log('error: ' + e);
});
httpreq.end();
我仍然不知道为什么原作不起作用。
答案 0 :(得分:2)
这是因为您无法在.on('data', )
的结果上调用get
,它必须位于回调内的response
实例上。
更好的选择可能只是使用一个为您提取这些低级别详细信息的库(例如request)。
答案 1 :(得分:1)
您对使用API感到困惑,但您并未真正调用on
返回的对象上的https.get
函数,而是通过res
执行此操作从回调函数参数提供的对象。
代码由它自己说话,所以不要这样做:
var https = require("https");
https.get("https://tfe-opendata.com/api/v1/stops", function(res) {
console.log("Response: ", res.statusCode);
console.log("Res: " + res);
}).on('data', function(data) {
console.log('blah');
console.log("data: " + data);
process.stdout.write(data);
}).on('error', function(error) {
console.error('Error ' + error);
}).on('end', function(){
console.log("End.");
});
你应该这样做:
https.get("https://tfe-opendata.com/api/v1/stops", function(res) {
console.log("Response: ", res.statusCode);
console.log("Res: " + res);
res.on('data', function(data) {
console.log('blah');
console.log("data: " + data);
process.stdout.write(data);
}).on('error', function(error) {
console.error('Error ' + error);
}).on('end', function(){
console.log("End.");
});
});