繁体   English   中英

如何同时从多个 api 获取数据并将它们显示在我的网页上?

[英]How do i get data from multiple apis simultanously and display them on my webpage?

我正在构建一个新闻/博客网站,它从外部 api 获取数据并将其显示到网页上。到目前为止,我已经设法从一个 api 呈现数据,但我的网页中还有一个运动部分,需要我获取数据来自另一个这样的 api,但我不知道如何做到这一点,而节点不会向我抛出错误。 下面是我的 NODE.JS 代码-

//jshint esversion: 6

const express = require('express');
const https = require('https');
const bodyParser = require("body-parser");
const ejs = require("ejs");
const app = express();
const port = 3000;


app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static("public"));


app.get('/', (req, res) => {
const sporturl ="https://timesofindia.indiatimes.com/feeds/newsfeed/33187923.cms? 
feedtype=sjson";
const newsurl = "https://timesofindia.indiatimes.com/feeds/newsdefaultfeeds.cms? 
feedtype=sjson#";
https.get(newsurl, function(response){
    var data;
response.on("data", function(chunk) {
    if (!data) {
        data = chunk;
    } else {
        data += chunk;
    }
});

response.on("end", function() {
    const fulldata = JSON.parse(data);
            let mainHeader = fulldata.NewsItem[0].HeadLine;
            let mainheaderurl = fulldata.NewsItem[0].WebURL;
            let mainCaption = fulldata.NewsItem[0].Caption;
            let mainUrl = fulldata.NewsItem[0].Image.Photo;
            let featured = fulldata.NewsItem[1].HeadLine;
            let featuredlink = fulldata.NewsItem[1].WebURL;
            let featuredimg = fulldata.NewsItem[1].Image.Photo;


    res.render("index",{
                mainHeader: mainHeader,
                headerUrl: mainheaderurl,
                mainCaption: mainCaption,
                imgUrl: mainUrl,
                featured:featured,
                featuredlink:featuredlink,
                featuredimg:featuredimg,
            });
     });

     });
  
     });

     app.listen(port, () => {
     console.log(`server started on port 3000`);
     });
    // api key: ff827a803d4540f5814864d207fd23b5
    // const mainHeadingUrl = "https://newsapi.org/v2/everything?q=tesla&from=2021- 
    05-26&sortBy=publishedAt&apiKey=ff827a803d4540f5814864d207fd23b5";

我会使用Fetch API (对于 nodeJS,你可以使用node-fetch )、 async/awaitPromise.all来收集数据。

将一些 API 调用推送到数组中。 它们将作为承诺返回(数据将(或不会)返回的承诺)。 Promise.all一直等到所有这些承诺都解决了,然后将数据输出为一个数组,然后您可以对其进行迭代。

 function mockApi(n) { return new Promise((res, rej) => { setTimeout(() => res(n), 2000); }); } // Here you would bundle up your fetch calls // eg: fetch(url) // I'm using mockApi as a convenience const fetchCalls = [mockApi(1), mockApi(2), mockApi(3)]; async function getData() { const data = await Promise.all(fetchCalls); console.log(data); } getData();

这是回答here。

nodejs - 如何承诺 http.request? 拒绝被叫了两次

然后您可以使用那里描述的方法并使用 Promise.all 并获得所需的结果

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM