【问题标题】:Retrieve from multiple APIs using Node Js and parsing it over to EJS files使用 Node Js 从多个 API 中检索并将其解析为 EJS 文件
【发布时间】:2017-08-29 04:00:13
【问题描述】:

大家好,我目前在尝试解决这个问题时遇到了麻烦,所以我正在使用 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});
        }
    });
});

【问题讨论】:

  • results.ejs的内容是什么。还有,有什么问题?
  • 问题是我无法弄清楚如何从多个来源中提取 EJS 文件看起来像这样

  • 我不明白这个问题。此外,您还包含了您的 api 密钥,因此您现在可能应该停用它。我能够获取json
  • 它可以在他们的网站上公开使用,我真的只是想看看如何从多个 API 源检索数据,然后将它们传递给 EJS 文件。

标签: javascript node.js api ejs


【解决方案1】:

您可以创建一个单独的函数,从 URL 获取数据并返回 Promise。当 Promise 解析时,它将拥有 JSON 对象。然后你可以随心所欲地渲染数据。

这是一个示例,我从三个不同的 URL 获取 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 个结果。

【讨论】:

  • 谢谢你,这似乎完成了我想做的事情。 ! +1
  • 更新,我在“data_one:data[0]”部分有一个后续问题,我们如何过滤每个关键字的 api 结果?
  • 查看Array.filter 了解如何过滤对象数组。
  • 我需要将结果推送到数组然后运行过滤器吗?
  • 是的,过滤器仅适用于数组。如果您使用 JSON 和预期输出创建一个新问题,我相信有人可以回答。
猜你喜欢
  • 1970-01-01
  • 2020-08-01
  • 2012-10-20
  • 1970-01-01
  • 1970-01-01
  • 2016-11-09
  • 1970-01-01
  • 2023-03-06
  • 2018-07-12
相关资源
最近更新 更多