Я получаю сообщение об ошибке GET http://localhost:3000/api/products 404 (Не найден)

#node.js #reactjs #redux

#node.js #reactjs #redux

Вопрос:

Ну, в StackOverflow есть много вопросов об этой ошибке, я видел их все, ни один из них не работает для меня. Я использую react с redux, пытаясь получить некоторые продукты. мой серверный серверный узел работает на порту 5000, и я использую его одновременно для одновременного запуска обоих серверов всякий раз, когда я пытаюсь получить данные, используя порт 3000, где работает мой интерфейс. Пожалуйста, кто-нибудь, помогите мне решить эту проблему

файл package.json

 {
  "name": "proshop",
  "version": "1.0.0",
  "description": "MERN application named proshop",
  "main": "server.js",
  "type": "module",
  "scripts": {
    "start": "node backend/server",
    "server": "nodemon backend/server",
    "client": "npm start --prefix frontend",
    "dev": "concurrently "npm run server" "npm run client"",
    "data:import": "node backend/seeder",
    "data:destroy": "node backend/seeder -d"
  },
  "keywords": [
    "NodeJS",
    "ExpressJs",
    "React",
    "Redux",
    "MongoDb"
  ],
  "author": "Narayan Maity",
  "license": "ISC",
  "dependencies": {
    "bcryptjs": "^2.4.3",
    "colors": "^1.4.0",
    "concurrently": "^5.3.0",
    "dotenv": "^8.2.0",
    "express": "^4.17.1",
    "express-async-handler": "^1.1.4",
    "mongoose": "^5.10.9"
  },
  "devDependencies": {
    "nodemon": "^2.0.6"
  }
}
  

Вот мой productsAction.js файл

 import axios from 'axios';
import {
  PRODUCT_LIST_FAIL,
  PRODUCT_LIST_REQUEST,
  PRODUCT_LIST_SUCCESS,
} from '../constants/productConstants';

export const listProducts = () => async (dispatch) => {
  try {
    dispatch({ type: PRODUCT_LIST_REQUEST });

    const { data } = await axios.get('http://localhost:5000/api/products');

    dispatch({ type: PRODUCT_LIST_SUCCESS, payload: data });
  } catch (error) {
    dispatch({
      type: PRODUCT_LIST_FAIL,
      payload:
        error.response amp;amp; error.response.data.message
          ? error.response.data.message
          : error.message,
    });
  }
};
  

Если я использую полный адрес, например HTTP://localhost:5000/api/products это дает мне ошибку CORS

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

1. в react client папке или добавьте новую key и value пару "proxy": "http://localhost:5000" в свою package.json . Тогда вы можете просто сделать await axios.get('/api/products')

2. спасибо @lala, это сработало, пожалуйста, отправьте сообщение в качестве ответа, чтобы я мог принять

Ответ №1:

Это было бы намного проще, и focus если вы добавите "proxy": "http://localhost:5000" в свою client или react папку проекта, например:-

client/package.json

 {
  "name": "projectname",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
  ...}
  "proxy": "http://localhost:5000"
}
  

Тогда вы можете просто сделать:-

 await axios.get('/api/products') // straight away use whatever path you've specified
  

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

1. я добавил прокси, но получаю сообщение об ошибке, и в браузере появляется этот код try { dispatch({ type: PRODUCT_LIST_REQUEST }) const { data } = await axios.get(‘/api/products’) dispatch({ type: PRODUCT_LIST_SUCCESS, полезная нагрузка: данные }) } catch (ошибка) { отправка({ тип: PRODUCT_LIST_FAIL, полезная нагрузка: ошибка.ответ amp;amp; ошибка.ответ.данные.сообщение? error.response.data.message: ошибка.message, }) } } я установил для своего прокси значение «proxy»: » localhost: 5000 «, но все равно получаю ошибку

2. Ошибки CORS ? или другая ошибка? Можете ли вы также обновить свой код выше

3. импорт axios из ‘axios’ импорт { PRODUCT_LIST_REQUEST, PRODUCT_LIST_SUCCESS, PRODUCT_LIST_FAIL, } из ‘../constants/productConstants’ экспорт const listProducts = () => асинхронный (отправка) => { попробуйте { отправка ({ тип: PRODUCT_LIST_REQUEST }) const { data } = ожидание axios.get(‘/api / products’) отправка ({ тип: PRODUCT_LIST_SUCCESS, полезная нагрузка: данные }) } перехват (ошибка) { отправка ({ тип: PRODUCT_LIST_FAIL, полезная нагрузка: ошибка.ответ amp;amp; ошибка.ответ.данные.сообщение? ошибка.ответ.данные.сообщение: ошибка.сообщение, }) } }

4. Ошибка: объекты недопустимы как дочерние элементы React (найдено: объект с ключами {}). Если вы хотели отобразить коллекцию дочерних элементов, вместо этого используйте массив.

5. дело в том, когда возникает ошибка с использованием приведенного ниже кода: import express from ‘express’ import AsyncHandler from ‘express-async-handler’ import Product from ‘ ../models/productModel.js ‘const маршрутизатор = экспресс. Router() //@desc извлекает все продукты //@route GET /api/products //@access Public router.get(‘/’, AsyncHandler(async (req, res) => {const products = await Product.find({}) выдает новую ошибку (‘НекоторыеОшибка’) res.json(products) })) я получаю сообщение об ошибке, но когда я удаляю строку, она работает нормально, когда выдает ошибку, она ищет данные из: 3000/ api /products