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