You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React.js中Proxy配置无效,请求仍走3000端口致404错误

问题:React代理配置后仍请求3000端口导致404错误

我需要从8000端口获取数据,但始终返回404错误,排查后发现请求还是走了3000端口。已经在package.json里配置了proxy,但不知道问题出在哪。

错误信息:

GET http://localhost:3000/hotels/countByCity?cities=berlin,madrid,lodon 404 (Not Found)


相关代码

package.json

{
  "name": "booking",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@fortawesome/free-regular-svg-icons": "^6.2.0",
    "@fortawesome/free-solid-svg-icons": "^6.2.0",
    "@fortawesome/react-fontawesome": "^0.2.0",
    "@testing-library/jest-dom": "^5.16.5",
    "@testing-library/react": "^13.4.0",
    "@testing-library/user-event": "^13.5.0",
    "axios": "^1.1.3",
    "date-fns": "^2.29.3",
    "react": "^18.2.0",
    "react-date-range": "^1.4.0",
    "react-dom": "^18.2.0",
    "react-router-dom": "^6.4.2",
    "react-scripts": "5.0.1",
    "web-vitals": "^2.1.4"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "proxy":"http://localhost:8000/api"
}

useFetch.js

import { useEffect, useState } from "react";
import axios from "axios";

const useFetch = (url) => {
  const [data, setData] = useState([]);
  const [loading, setLoading] = useState(false);
  const [error, setError] = useState(false);

  useEffect(() => {
    const fetchData = async () => {
      setLoading(true);
      try {
        const res = await axios.get(url);
        setData(res.data);
      } catch (err) {
        setError(err);
      }
      setLoading(false);
    };
    fetchData();
  }, [url]);

  const reFetch = async () => {
    setLoading(true);
    try {
      const res = await axios.get(url);
      setData(res.data);
    } catch (err) {
      setError(err);
    }
    setLoading(false);
  };

  return { data, loading, error, reFetch };
};

export default useFetch;
import React from 'react'
import "./featured.css"
import useFetch from "../../hooks/useFetch"
const Featured = () => {
const{ data,loading,error}=useFetch("/hotels/countByCity?cities=berlin,madrid,lodon")
console.log(data);
    return (
        <div className='featured'>
            <div className="featuredItem">
                <img className='featuredImg' src="https://i.pinimg.com/564x/53/47/6a/53476a9ce987dcc41b19385744f09ab3.jpg" />
                <div className="featureTitle">
                    <h1>Amazônia.</h1>
                    <h3>189 properties</h3>
                </div>
            </div>

            <div className="featuredItem">
                <img className='featuredImg' src="https://i.pinimg.com/564x/cf/fb/34/cffb34899bc7e9262f4f91270d51677d.jpg" />
                <div className="featureTitle">
                    <h1>Avignon’s historic center.</h1>
                    <h3>259 properties</h3>
                </div>
            </div>

            <div className="featuredItem">
                <img className='featuredImg' src="https://i.pinimg.com/564x/7f/6f/0a/7f6f0a8668aa2da61d9025859406e2f1.jpg" />
                <div className="featureTitle">
                    <h1>Naz City Hotel Taksim</h1>
                    <h3>345 properties</h3>
                </div>
            </div>
        </div>
    )
}

export default Featured

排查与解决方法

1. 重启React开发服务器

React的proxy配置仅在启动服务器前读取生效,修改package.json后必须重启npm start,否则新配置不会加载。

2. 检查API路径匹配

你的proxy设置为http://localhost:8000/api,意味着前端请求/hotels/xxx会被代理到http://localhost:8000/api/hotels/xxx。需要确认后端8000端口是否真的存在这个路径:

  • 如果后端接口没有/api前缀,直接把package.json里的proxy改成http://localhost:8000即可。

3. 确认Axios无全局baseURL覆盖

检查是否在其他代码中给Axios设置了baseURL为http://localhost:3000,这会直接覆盖proxy规则。可以在useFetch里临时打印验证:

console.log(axios.defaults.baseURL);

4. 改用环境变量替代proxy(可选)

如果上述方法无效,可在项目根目录创建.env.development文件,添加:

REACT_APP_API_URL=http://localhost:8000/api

然后修改useFetch的请求代码:

const res = await axios.get(`${process.env.REACT_APP_API_URL}${url}`);

这种方式更灵活,也避免了React脚本的proxy限制。

内容的提问来源于stack exchange,提问作者Anna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 09:35:20