如何访问在回调函数外部全局声明的变量?

时间:2019-02-25 14:19:10

标签: javascript node.js express ejs

背景故事:我制作了一个快递应用程序,它带有搜索词并使用OMDB API为其生成电影搜索结果。我可以通过操纵api调用URL的http://www.omdbapi.com/?apikey=XXXXXXX&s=blahblah“ s”参数来获得搜索结果,但我也想生成一个JSON对象数组(通过操纵URL中的“ i”参数包含有关电影的详细信息)所有这些特定的搜索结果中。

API:http://www.omdbapi.com/

服务器文件-

var express = require("express");
var app = express();
var request = require("request");

app.set("view engine", "ejs");

app.get("/", function(req, res) {
    res.render("home");
});

app.get("/results", function(req, res) {
    // req.query will return a JS object after the query string is parsed
    var search = req.query.search;
    var url = 'http://www.omdbapi.com/?apikey=d0b74394&s=' + search;
    request(url, function (error, response, body) {
        if(!error && response.statusCode == 200) {
            var parsedData = JSON.parse(body);
            var movieInfo = new Array(10);

            for(var i = 0; i < 10; i++) {
                var imdbID= parsedData["Search"][i]["imdbID"];
                var newUrl = 'http://www.omdbapi.com/?apikey=d0b74394&i=' + imdbID;

                request(newUrl, function (error, response, body) {
                     if(!error && response.statusCode == 200) {
                         movieInfo[i] = JSON.parse(body);
                         console.log(movieInfo[i]);
                         // **NOTE** CANNOT ACCESS MOVIEINFO OUTSIDE THIS INNDER CALLBACK FUNCTION
                        //  NEED TO FIGURE OUT A WAY TO SEND THIS DATA TO THE RESULTS.EJS
                     }
                });

            }
            res.render("results", {search: search, parsedData: parsedData, movieInfo: movieInfo });
        }
    });
});

app.listen(process.env.PORT, process.env.IP, function() {
    console.log("Server has started...");
});

* results.ejs-*

<h1><u>Results</u></h1>

<h3>Movies related to - <%= search %></h3>

<ol>
    <% for(var i = 0 ; i < 10; i++) { %>
        <li style="padding: 20px;">
            <p><%= parsedData["Search"][i]["Title"] %> (<%= parsedData["Search"][i]["Year"] %>)</p>
            <br>
            <img src="<%= parsedData["Search"][i]["Poster"] %>" style="width: 200px">
        </li>
    <% }; %>
</ol>


<br>
<a href="/">Go back!</a>

问题::在服务器文件中,该部分注释了 // NOTE ,这意味着我无法在内部回调外部访问数组 movieInfo 这就是为什么我无法将其作为对象传递给 results.ejs 文件的原因。

有人可以帮我访问内部回调函数之外的 movieInfo 数组吗?在控制台中显然是 undefined 。 附言我正在内部回调函数中获取所需的JSON对象数组(包含搜索结果中制作的每部电影的详细信息)。

0 个答案:

没有答案