e js проблема "data.result.forEach не является функцией - PullRequest
1 голос
/ 06 января 2020

У меня есть сайт results.e js, на котором я пытаюсь получить результаты обратного вызова API. В e js у меня есть следующее:

<h1>Results Page!!</h1>

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

Здесь значение должно быть взято из приложения. js, которое включает в себя ключ API, который работает только при разборе тела et c :

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, хотя ключ уже находится в заголовке. Я не слишком уверен.

1 Ответ

0 голосов
/ 06 января 2020

Ваш код предполагает, что data["result"] - это массив, но это не так. Откуда я это знаю? .forEach() требует массив для работы. Если он используется для чего-то другого, кроме массива, вы получите это сообщение.

Вы позвонили res.render('results', {data: data})

Не зная наверняка, я думаю, ваш data объект довольно сложный. Эта закомментированная строка:

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

создает видимость массива на data.result.data. (Дешевая распродажа - это индекс [0].) Если это так, ваш код e js должен сказать

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

Я изменил function(data) на function(item), потому что в противном случае имя параметра data в вызов функции shadows имя data от вызывающего абонента, и это просто сбивает с толку.

Вы можете узнать структуру вашего data объекта, выполнив console.log(data) и глядя на вывод, или вы можете прочитать документы для API.

...