【问题标题】:TypeError: Cannot read property 'forEach' of undefined of ejs fileTypeError:无法读取 ejs 文件未定义的属性“forEach”
【发布时间】:2020-07-20 22:23:17
【问题描述】:

我是 nodejs、express 和 ejs 的新手。我正在开发一个非常简单的表单,它允许用户提交州名,并且该州名用于在 api 中获取包含该州名的所有电影标题,并将它们呈现在我的结果页面上。我得到了 TypeError 响应,或者我的浏览器将持续加载而没有响应。

(错误响应)

TypeError: /Users/Documents/NodeProjects/webProj/moreapps/views/results.ejs:3
    1| <h1>Here is the Results Page!!!!</h1>
    2| 
 >> 3| <% data["Search"].forEach(function(movie) { %>
    4| <li><%= movie["Title"] %></li>
    5| 
    6| <% }) %>

Cannot read property 'forEach' of undefined
    at eval (eval at compile (/Users/Documents/NodeProjects/webProj/moreapps/node_modules/ejs/lib/ejs.js:632:12), <anonymous>:10:23)
    at results (/Users/Documents/NodeProjects/webProj/moreapps/node_modules/ejs/lib/ejs.js:662:17)
    at tryHandleCache (/Users/Documents/NodeProjects/webProj/moreapps/node_modules/ejs/lib/ejs.js:255:36)
    at View.exports.renderFile [as engine] (/Users/Documents/NodeProjects/webProj/moreapps/node_modules/ejs/lib/ejs.js:461:10)
    at View.render (/Users/Documents/NodeProjects/webProj/moreapps/node_modules/express/lib/view.js:135:8)
    at tryRender (/Users/Documents/NodeProjects/webProj/moreapps/node_modules/express/lib/application.js:640:10)
    at Function.render (/Users /Documents/NodeProjects/webProj/moreapps/node_modules/express/lib/application.js:592:3)
    at ServerResponse.render (/Users/Documents/NodeProjects/webProj/moreapps/node_modules/express/lib/response.js:1008:7)
    at Request._callback (/Users/Documents/NodeProjects/webProj/moreapps/app.js:34:7)
    at Request.self.callback (/Users/Documents/NodeProjects/webProj/moreapps/node_modules/request/request.js:185:22)

(app.js)

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

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

app.get('/results', function (req, res, next) {

  //console.log ('hello world');
  request('https://www.omdbapi.com/?s=&apikey=thewdb', function (error, response, body) {
    if(!error && response.statusCode == 200) {
var data = JSON.parse(body);
      var search = data["Search"];
  //console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
  console.log(data);
  //res.send(parsedData);
  res.render('results', {data: data});
  //console.log(body);
    }
  });
});

(search.ejs)

<h1>Search for a movie!!!</h1>

<form action="/results" method="GET">
<input type="text" placeholder="search term" name="search">
<input type="submit">
</form>

(results.ejs)

<h1>Here is the Results Page!!!!</h1>

<% data["Search"].forEach(function(movie) { %>
<li><%= movie["Title"] %></li>

<% }) %>

【问题讨论】:

  • 能否请我们提供一个有效回复的模板?
  • 我添加了更彻底的回复。希望这会有所帮助,谢谢

标签: node.js api express ejs


【解决方案1】:
app.get('/results', (req, res) => {
    // taking data(name=search) from the form input. 
    var query = req.query.search;
    var url = `http://www.omdbapi.com/?apikey=ed41f225&s=${query}`;
    console.log(url);

    request(url, (error, response, body) => {
        if (!error && response.statusCode == 200) {
            var data = JSON.parse(body)
            //res.send(data["Search"][0]["Title"]);
            res.render("results", {
                data: data
            });
            console.log(data);
        } else {
            console.log("Error");
        }

    })
});

您没有正确分配代码检查 URL 并修复它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多