大家好,我目前无法解决这个问题,因此我正在尝试使用https://newsapi.org/ API来尝试从多个来源获取信息,但我目前无法想出一个方法&解析它到EJS我可以为一个api源做,但不是多个,这甚至可能。
这是我迄今为止设法提出的
app.get("/", function(req, res){
request("https://newsapi.org/v1/articles?source=the-new-york-times&sortBy=top&apiKey=70a5906f19f844f291cff401c80bc123", function(error, response,body){
if(! error && response.statusCode == 200) {
var data = JSON.parse(body);
res.render("results", {data: data});
}
});
});
答案 0 :(得分:1)
您可以创建一个单独的函数,从URL获取数据并返回Promise。当promise解析时,它将具有JSON对象。然后你可以随意渲染数据。
以下是我从三个不同的网址中获取3个结果的示例。在操作数据之前,我正在使用Promise.all等待所有3个请求的响应。
function fetchJSON(url) {
return new Promise((resolve, reject) => {
request(url, function(err, res, body) {
if (err) {
reject(err);
} else if (res.statusCode !== 200) {
reject(new Error('Failed with status code ' + res.statusCode));
} else {
resolve(JSON.parse(body));
}
});
});
}
app.get("/", function(req, res) {
const p1 = fetchJSON('http://example.com/one');
const p2 = fetchJSON('http://example.com/two');
const p3 = fetchJSON('http://example.com/three');
Promise.all([p1, p2, p3]).then((data) => {
res.render("results", {
data_one: data[0],
data_two: data[1],
data_three: data[3]
});
}).catch(err => console.error('There was a problem', err));
});
请注意,您可以使用data
数组执行任何操作。我在渲染过程中将其拆分为三个独立的属性,以显示确实有3个结果。