【问题标题】:ejs issue "data.result.forEach is not a functionejs 问题“data.result.forEach 不是函数
【发布时间】:2020-01-07 00:24:44
【问题描述】:

我有一个 results.ejs 站点,我尝试获取 api 回调的结果。在 ejs 我有以下内容:

<h1>Results Page!!</h1>

<%data["result"].forEach(function(data){%>
<li><%= data["address"]%></li>
<% }) %>

这里的值应该取自 app.js,其中包含 api 键,它仅用于解析正文等:

var express = require("express");
var app = express();
var request = require("request");
app.set("view engine", "ejs");

var KEY = process.env.token;

var menuSearch = {
  method: "GET",
  url: "https://us-restaurant-menus.p.rapidapi.com/restaurants/zip_code/61603",
  // url: "https://us-restaurant-menus.p.rapidapi.com/restaurants/search/portillos",
  qs: { page: "1" },
  headers: {
    "X-RapidAPI-Key": KEY,
    "X-RapidAPI-Host": "us-restaurant-menus.p.rapidapi.com"
  }
};

app.get("/results", function(req, res) {
  request(menuSearch, function(error, response, body) {
    // console.log(body);

    if (!error && response.statusCode == 200) {
      var data = JSON.parse(body);
      // res.send(data)
      // res.send(data["result"]["data"][0]["address"]["city"])
      res.render("results", { data: data });
    }
  });
  // res.send("Hello, it works!");
});

var port = process.env.PORT || 3000;

app.listen(port, process.env.IP, function() {
  console.log("running on port: " + port);
});

现在最后输出给了我:

    1| <h1>Results Page!!</h1>
    2| 
 >> 3| <%data["result"].forEach(function(data){%>
    4| <li><%= data["address"]%></li>
    5| <% }) %>
    6| 

data.result.forEach is not a function...

有人可以告诉我它在哪里断开了吗?

我认为密钥应该在 URL 本身中,尽管密钥已经在标题中。我不太确定。

【问题讨论】:

    标签: node.js express ejs


    【解决方案1】:

    您的代码假定data["result"] 是一个数组,但事实并非如此。我怎么知道这个? .forEach() 需要一个数组才能工作。如果它用于数组以外的东西,您会收到该消息。

    你打电话给res.render('results', {data: data})

    在不确定的情况下,我猜您的 data 对象相当复杂。此注释掉的行:

      res.send(data["result"]["data"][0]["address"]["city"])
    

    使它看起来像data.result.data 有一个数组。 (赠品是索引[0]。)如果这是真的,你的ejs代码应该说

    <%data.result.data.forEach(function(item){%>
    <li><%= item.address%></li>
    <% }) %>
    

    我将function(data) 更改为function(item),因为否则函数调用shadows 中的data 参数名称来自其调用者的名称data,这只是令人困惑。

    您可以通过执行 console.log(data) 并查看输出来找出您的 data 对象的结构,或者您可以阅读 api 的文档。

    【讨论】:

    • 很好的解释,回答了我的问题。谢谢!
    猜你喜欢
    • 2012-12-25
    • 2014-09-29
    • 2017-11-03
    • 2019-01-21
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    • 2019-09-04
    相关资源
    最近更新 更多