React API 调用在开发中工作,在生产构建中失败

Posted

技术标签:

【中文标题】React API 调用在开发中工作,在生产构建中失败【英文标题】:React API calls work in development and fail in production build 【发布时间】:2020-11-11 03:42:18 【问题描述】:

我正在尝试使用 Spring Boot/Hibernate Restful CRUD API 部署 React 项目。我在本地运行 SQL 数据库并在开发模式下运行我的 React 应用程序 (localhost:3000) 允许与我的 API 成功通信。

但是,当我构建我的生产应用程序 (localhost:5000) 时,API 不成功。 API 响应是错误代码 304。我最好的猜测是端口的变化与某些东西混淆了?它在端口:3000 上按预期工作,在端口:5000 上构建时失败。

我以前从未部署过 React 应用程序,所以感谢您的帮助!


API 调用

   const apiCall = () => 
    fileService
      .getUsers()
      .then((response) => 
        setUsers(response.data); //Incorrectly returns a 304 error
      )
      .catch(function (error) 
        console.log(error);
      );
  ;

getUsers()

    getUsers() 
        return service.getRestClient().get("/api/getAllUsers");
    

getRestClient()

getRestClient() 
    if (!this.serviceInstance) 
      this.serviceInstance = axios.create(
        baseURL: "http://localhost:5000/",
        timeout: 10000,
        headers: 
          "Content-Type": "application/json",
          "Access-Control-Allow-Origin": "*",
          "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE",
          "Access-Control-Allow-Headers": "Content-Type",
          "Access-Control-Allow-Credentials": true,
        ,
      );
    
    return this.serviceInstance;
  

【问题讨论】:

您不能在客户端上设置"Access-Control-Allow-Origin"。这是应该由服务器提供的 response 标头。如果您要在生产中使用不带代理的 API,请检查您的服务器是否发送此标头。 【参考方案1】:

自从发布以来,我了解到您不能在 React 的生产版本中使用代理。 package.json 中的"proxy:" 仅在开发中有效 - 在生产中无效。感谢大家的帮助。

来源:https://create-react-app.dev/docs/proxying-api-requests-in-development/

【讨论】:

那么问题的解决方法是什么。我有同样的问题。【参考方案2】:

Ben,首先,我认为您需要确保您的后端确实在 5000 上运行,然后您需要使用 postman、高级 REST api 或 insomnia 等工具尝试一个简单的请求。

也许,您需要释放您计算机(防火墙)上的 5000 端口。

其他想法是,您需要指定一些标志来使用其他请求 ip/port,在我的情况下,我使用 angular,我需要一些标志:

ng serve --host 0.0.0.0 --disable-host-check

【讨论】:

以上是关于React API 调用在开发中工作,在生产构建中失败的主要内容,如果未能解决你的问题,请参考以下文章

Angular 6 - 为啥生产构建中缺少承载令牌? (在开发版本中工作正常)

Angular 2 生产构建错误。在开发中工作正常

vuex 商店在开发服务器中工作,但在生产构建中不工作

nextjs POST API 不能在实时环境中工作,但在本地环境中工作完美

google drive Api 无法在生产环境中工作“无法启动浏览器”

当试图直接访问它们时,React网站w /表示不在生产中加载路由,在dev中工作正常