首页 > 解决方案 > 我收到错误 GET http://localhost:3000/api/products 404(未找到)

问题描述

好吧,StackOverflow 中有很多关于这个错误的问题,我已经看到所有这些问题都不适合我。我正在使用 react with redux 试图获取一些产品。我的后端服务器节点在端口 5000 上运行,并且每当我尝试使用我的前端运行的端口 3000 获取数据时,我同时使用同时启动两个服务器。请有人帮我解决这个问题

包.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 && error.response.data.message
          ? error.response.data.message
          : error.message,
    });
  }
};

如果我使用像 HTTP://localhost:5000/api/products 这样的完整地址,它会给我 CORS 错误

标签: node.jsreactjsredux

解决方案


focus如果您添加"proxy": "http://localhost:5000"到您的clientreact项目文件夹中,这会容易得多,如下所示:-

客户端/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

推荐阅读