Javascript q-io:如何使用承诺读取response.body JSON对象?
我需要从一台服务器向另一台服务器发出http请求 处理此请求的服务器将只返回一个JSON对象数组:Javascript q-io:如何使用承诺读取response.body JSON对象?,javascript,node.js,http,httprequest,httpresponse,Javascript,Node.js,Http,Httprequest,Httpresponse,我需要从一台服务器向另一台服务器发出http请求 处理此请求的服务器将只返回一个JSON对象数组: app.get('/array', function (req, res) { console.log('GET request received!'); var response_array = [ { value: 1234 }, { value: 1234 }, { value: 55 } ];
app.get('/array', function (req, res) {
console.log('GET request received!');
var response_array = [
{
value: 1234
},
{
value: 1234
},
{
value: 55
}
];
res.send(response_array);
});
我正在使用q-io
向该GET方法/array
发送http请求并获取数组:
var _getArray = function(externalUrl) {
var request = {
method: "GET",
url: externalUrl
};
return HTTP.request(request)
.then(function(response) {
// I need to return the Array inside the body (a Promise) to
// iterate on it later
return response.body.read(); // but .read() returns a Buffer
});
}
这两个服务器都工作正常,因为请求和响应都正确地从一个服务器发送到另一个服务器
问题是我没有获得JSON数组-因为read()
返回缓冲区,而只是响应。body
不返回数组(正如文档所说,它返回可读流的表示形式)。。。如何正确处理此问题,以正确地从文档中获取带有承诺的数组
似乎您必须使用
forEach
来获取所有项目如果您可以获得响应主体内容的承诺,那么您可以通过以下方式获得JSON负载的承诺:
我认为您不需要read(),只需使用
return response.body
@ZohaibIjaz不,它不返回数组,而是返回数组,正如文档所说,它是一个可读流的表示形式,用于请求或响应的内容。它是作为Q-IO阅读器实现的。您可能需要.read()。然后(JSON.parse)
@Bergi谢谢,这正是我想要的,但我没有意识到我可以这么说!发布一个答案,我会把它标记为正确。我不确定它是否有效,因为你说这是一个缓冲区的承诺,而不是字符串。但也许它被铸造的很好…但forEach似乎使用回调,我想回报一个承诺
return HTTP.request(request)
.then(function(response) { return response.body.read() })
.then(JSON.parse);