Ошибка типа: req.body.forEach не является функцией

#javascript #html #node.js #express

#javascript #HTML #node.js #выразить

Вопрос:

Я хочу рассчитать общую сумму питательных веществ для выбранных продуктов питания в моей таблице. Пользователь может ввести количество каждого продукта питания и выбрать, какие продукты они хотят добавить, используя флажки. Перед добавлением количество умножается на питательные вещества для продукта. Я добавил счетчик для количества, а затем попытался выполнить итерацию по req.boy, чтобы получить значение для каждого qty выбранного, но я получаю ошибку типа.

 app.post("/calculate", function (req, res) {
  let sqlquery =
    "SELECT SUM(?*calories) AS calories, SUM(?*carbs) AS carbs, SUM(?*fat) AS fat, SUM(?*protein) As protein, SUM(?*salt) As salt, SUM(?*sugar) As sugar FROM food_item WHERE name IN (?)";
  req.body.forEach(function (item) {
    let sum = [
      item.qty,
      item.qty,
      item.qty,
      item.qty,
      item.qty,
      req.param("checkbox"),
    ];
  });
  db.query(sqlquery, sum, (err, result) => {
    if (err) {
      return console.error(err.message);
    } else {
      res.send(
        "The nutritional information and calorie count of "  
          req.param("checkbox")  
          " is: "  
          JSON.stringify(result)
      );
    }
  });
});
 
 <% availableFood.forEach(function(food_item, count){ %>
<tr>
  <td>
    <input type="checkbox" name="checkbox[]" value="<%= food_item.name %>" />
  </td>
  <td>
    <input type="text" name="qty <%= count %>" value="1" style="width: 30px" />
  </td>
  <td><%= food_item.name %></td>
  <td><%= food_item.typical_values %></td>
  <td><%= food_item.unit_of_the_typical_value %></td>
  <td><%= food_item.calories %></td>
  <td><%= food_item.carbs %></td>
  <td><%= food_item.fat %></td>
  <td><%= food_item.protein %></td>
  <td><%= food_item.salt %></td>
  <td><%= food_item.sugar %></td>
</tr>
<% }) %>
 

Комментарии:

1. А содержимое req.body есть?

Ответ №1:

req.body не является массивом. Это объект. forEach доступен только для массивов.

Ответ №2:

если вы хотите получить что-то со своего сервера, используйте метод GET, а не POST .

 req.body.forEach is not a function
 

Подобная ошибка может произойти, когда вы пытаетесь использовать forEach для неопределенных данных. В вашем скрипте я не вижу, что вы отправляете запрос, затем вы пытаетесь использовать forEach на

 req.body.forEach(function (item) {
 

но если нет запроса, значит, нет данных обратно. Я думаю, что это может быть причиной.

Попробуйте записать в консоль тело вашего запроса и элементы, которые вы передаете функциям, чтобы узнать, есть ли данные. Вы можете попытаться отладить его, используя недавно созданный массив над вашей функцией, чтобы проверить, правильно ли работает ваша функция. Если это сработает, значит, с вашим запросом что-то не так, как я сказал выше.

Кроме того, как сказал @ThirdHouseCaptain выше, если ваш запрос в порядке, но вы не вставили его в вопрос, проверьте, являются ли ваши данные объектом, потому что вы можете forEach для массивов, а не для object.s

Комментарии:

1. Как мне получить значения qty <%= count %> ? Я хочу получить значения количества только для элементов, для которых установлен флажок, и кто-то сказал мне сделать это таким образом.