使用响应链接GET请求Node.js
问题描述:
我试图对API执行GET请求,并将API响应中的数据返回给客户端。我认为客户端在API完成GET请求之前收到响应。如何更改代码以确保API的响应传递给客户端?使用响应链接GET请求Node.js
if (request.method == 'POST' && request.url == '/locationdata') {
var body = '';
request.on('data', function (data) {
body += data;
});
request.on('end', function() {
var formattedLocation = body.replace(/[\[\]']+/g, '');
var urlAPI = 'https://api.darksky.net/forecast/166731d8eab28d33a26c5a51023eff4c/' + formattedLocation;
response.writeHead(200, { 'Content-Type': 'application/json' });
var apiData = '';
var apirequest = function() {
https.get(urlAPI, function (response) {
response.on('data', function (data) {
apiData += data;
});
response.on('end', function() {
console.log(apiData);
return apiData;
});
});
}
response.end(apirequest);
});
return;
}
答
在从api获取所有数据之前,您将结束对客户端的响应。移动response.end()
调用到api响应结束时应该修复它:
if (request.method == 'POST' && request.url == '/locationdata') {
var body = '';
request.on('data', function (data) {
body += data;
});
request.on('end', function() {
var formattedLocation = body.replace(/[\[\]']+/g, '');
var urlAPI = 'https://api.darksky.net/forecast/166731d8eab28d33a26c5a51023eff4c/' + formattedLocation;
response.writeHead(200, { 'Content-Type': 'application/json' });
var apiData = '';
https.get(urlAPI, function (apiResponse) {
apiResponse.on('data', function (data) {
apiData += data;
});
apiResponse.on('end', function() {
console.log(apiData);
// send response to browser after we get all the data from the api
response.end(apiData);
});
});
// remove this because we moved it up
//response.end(apirequest);
});
return;
}
我仍然收到一个错误。我在节点中获取API数据,但我认为在响应结束之前它仍未被发送到浏览器。我在浏览器中出现以下错误:'“语法错误:JSON.parse ...”' –
我调整了答案并在代码中包含了它的完整副本 – Ryan
它的工作原理!谢谢。你的调整只是一个小错误。我必须改变'response.end(apirequest);''response.end(apiData);' –