使用Node J从多个API中检索并将其解析为EJS文件

时间:2017-08-25 16:07:15

标签: javascript node.js api ejs

大家好,我目前无法解决这个问题,因此我正在尝试使用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});
        }
    });
});

1 个答案:

答案 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个结果。