Ошибка типа: e.map не является функцией в react при развертывании в heroku

#reactjs #heroku

#reactjs #heroku

Вопрос:

У меня ошибка TypeError: e.map is not a function при развертывании в heroku:

Вот мои продукты.jsx:

     import React, { useEffect, useState } from "react";
    import axios from "axios";
    import styled from "styled-components";
    import media from "../../Styles/media";
    import TopProducts from "./TopProducts";
    import Pagination from "../Pagination";
    
    const Wrapper = styled.div`
      margin: 50px 0;
      ${media.tablet`
      margin: 10px 0;
      `};
    `;
    
    const Tops = (props) => {
      const [loading, setLoading] = useState(false);
      const [currentPage, setCurrentPage] = useState(1);
      const [itemsPerPage] = useState(9);
    
      const [products, setProducts] = useState([]);
      useEffect(() => {
        const fetchItems = async () => {
          setLoading(true);
          const res = await axios.get("/api/products");
          setProducts(res.data);
          setLoading(false);
        };
        document.title = `Shop - The Beuter`;
        fetchItems();
      }, [props]);
    
...
    
    export default Tops;
  

Это говорит мне, at cc (Products.jsx:82) что это за строка {products.map((product, i) => (...)

Как я могу исправить эту ошибку? Когда я пытаюсь использовать свой localhost, он работает нормально и без ошибок

Обновить функцию add .map:

 return (
    <ShopWrapper>
        <ListItems>
            {products.map((product, i) => (
                <Item key={i}>
                    <ItemLink to={`/product/${product.title_url}`}>
                        <ItemImage src={product.img_url1} />
                        <ItemTitle> {product.title} </ItemTitle>
                        <ItemPrice>
                            {nf.format(product.price)}
                            vnd
                        </ItemPrice>
                    </ItemLink>
                </Item>
            ))}
        </ListItems>
    </ShopWrapper>
);
  

Это вызывает ошибку при products.map

Обновленный код из серверной части: вот мой server.js из серверной части:

 const express = require("express"),
    app = express(),
    cors = require("cors"),
    port = process.env.PORT || 8000,
    db = "beuter",
    path = require("path"),
    server = app.listen(port, () => console.log(`Listening to on port ${port}`));

app.use(cors());
app.use(express.json());

if (process.env.NODE_ENV === "production") {
    app.use(express.static('beuter/build'))

    app.get('*', (req, res) => {
        res.sendFile(path.resolve(__dirname, 'beuter', 'build', 'index.html'));
    })
}
require("./server/config/database.config")(db);
require("./server/routes/product.route")(app);
  

Вот мой проект на github, если вы хотите просмотреть его:
https://github.com/nathannewyen/the-beuter

Я действительно ценю это

обновите мой route.js:

 const product = require("../controllers/product.controller");

module.exports = (app) => {

    app.get("/api/products", product.index);

    // Create a product
    app.post("/api/products", product.create);

    // Get one product by title_url
    app.get("/api/products/:title_url", product.show_title_url)

    // Delete a product
    app.delete("/api/products/:id", product.deleteProduct)

    //Edit a product
    app.put("/api/products/:id", product.update)

};
  

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

1. не вижу e.map в коде.

2. Просто обновите мой код! Можете ли вы проверить это для меня

3. что вы получаете за console.log(res)

4. Это даст мне обещание (ожидание), но если я console.log (res.data), это даст мне массив

5. понятно, можете ли вы удалить [props] и добавить это вместо [products, setProducts] и дать мне знать, что произойдет.

Ответ №1:

Порядок имеет значение при регистрации маршрутов.

Вы запрашиваете, /api/products и оно сопоставляется app.get('*', .

app.get("/api/products" никогда не проверяется.

Ставьте подстановочные маршруты последними.