Обещание, возвращенное из fetchData, игнорируется - PullRequest
3 голосов
/ 12 июля 2020

Я не уверен, в чем проблема. Я понимаю, что ax ios не может получить ответ от api, но я не могу понять почему.

Мой nodejs файл внутреннего сервера:

import data from './data';

const app = express();
app.get("/api/products", (req, res) => {

    res.send(data.products);
})
app.listen(5000, () => {console.log("Server started at http://localhost:5000")})

Я вижу data on localhost: 5000, но не тогда, когда я пытаюсь отобразить их во внешнем интерфейсе. Я получаю сообщение об ошибке: «Не удается получить api / products»

Вызов API-интерфейса внешнего интерфейса:

const [products, setProducts] = useState([]);

    useEffect(() => {
        const fetchData = async () => {
            const { data } = await axios.get("/api/products");
            setProducts(data);
        }
        fetchData();
        return () => {
            //
        };
    }, [])

пакет. json в интерфейсе:

{
  "name": "frontend",
  "proxy": "http://127.0.0.1:5000",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^4.2.4",
    "@testing-library/react": "^9.5.0",
    "@testing-library/user-event": "^7.2.1",
    "axios": "^0.19.2",
    "react": "^16.13.1",
    "react-dom": "^16.13.1",
    "react-router-dom": "^5.2.0",
    "react-scripts": "^2.1.8"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}

сеть журналы: введите описание изображения здесь

1 Ответ

0 голосов
/ 12 июля 2020

fetchData возвращает Promise. вам нужно разрешить его, используя await или then. И вам нужно извлечь свой метод из хука useEffect:

const fetchData = async () => {
   const { data } = await axios.get("/api/products");
   return data;
}

useEffect(() => {
    fetchData().then(data => setProducts(data));
}, []);
...