如何使用Node + Express处理多个GET请求

时间:2018-02-07 15:08:02

标签: javascript node.js express asynchronous

我有一个应用程序需要请求美国宇航局当天的天文图片5次,然后它将加载显示这些图像的网页。然后我请求一个不同的站点(LaunchLibrary API)来接下来的5次启动。我的问题是我必须显示图像;有时它会显示2张图像,有时是5张,有时则不会。这显然只是GET请求的异步性质,但我想知道是否有办法在呈现页面之前等待NASA图片。

这是我的一个例子。

app.get("/index", function(req, res) {
    /**Requesting NASA's Astronomy Picture of the Day**/
    var apod_url = "https://api.nasa.gov/planetary/apod?api_key=[My API Key]"
    var apod_img_urls = [];
    var curr_moment = moment();
    for(var i = 0; i < 5; i++) {
        var appended_url = apod_url + "&date=" + curr_moment.subtract(i, "days").format("YYYY-MM-DD");
        request(appended_url, function(error, reponse, body) {
            if(!error && reponse.statusCode == 200) {
                var img_json = JSON.parse(body);
                apod_img_urls.push(img_json.hdurl);
            } else {
                console.log(error);
            }
        });
    }
    /**************************************************/

    var url = "https://launchlibrary.net/1.3/launch/next/5";
    request(url, function(error, response, body) {
       if(!error && response.statusCode == 200) {
           var data = JSON.parse(body);
           res.render("index", {data: data, apod_img_urls: apod_img_urls});
       } else {
           console.log(error);
       }
    });
});

我还尝试在我的请求中将if-statement内部的图像请求循环放在接下来的5次启动中,这导致没有任何图像显示出来。有没有办法可以“同步”这些请求,以便在呈现页面之前返回所有图像?

0 个答案:

没有答案