代理不适用于生产中的 create-react-app

IT技术 javascript reactjs proxy
2021-04-26 21:25:13

我正在使用 reactjs( create-react-app ) 创建仪表板应用程序,在我的应用程序中,我调用了多个主机(为此我在 package.json 中配置了多个代理以避免 CORS)。前- www.app.demo1.com, www.app.demo2.com, www.app.demo3.com ...

"proxy": {
    "/demo1/api/":{
  "target":"www.app.demo1.com"
},
"/demo2/api/":{
  "target":"www.app.demo2.com"
},
"/demo3/api/":{
  "target":"www.app.demo3.com"
}
}

在应用程序中,我称之为-

try{
   const host1 = process.env.NODE_ENV === 'production'? 
   'www.app.demo1.com/demo1/api': '/demo1/api/';
   const host2 = process.env.NODE_ENV === 'production'? 
   'www.app.demo2.com/demo2/api': '/demo2/api/';
   const host3 = process.env.NODE_ENV === 'production'? 
  'www.app.demo3.com/demo3/api': '/demo3/api/';
   const resp1 = axios.get(host1)
   const resp2 = axios.get(host2)
   const resp3 = axios.get(host3)
}catch(){}

开发中:当向/demo1/api/提出请求时,它被代理到 www.app.demo1.com/demo1/api并且我得到了响应。

在生产中:我已经在 github 页面上部署了应用程序,虽然我收到以下错误,请 在此处输入图像描述

有没有人可以帮忙。。

1个回答

代理仅用于开发目的,它们由webpack-dev-server. 在生产中,您需要调用实际主机。

这是因为通常在开发过程中,react 由专门用于此目的的独立服务器提供服务(因此,webpack-dev-server)。在生产中,通常有一个后端(节点?ruby?php?)为页面提供服务,并且每次调用都将发送到具有相同主机名的某个端点。

例子:

在您的开发环境中,您有一个在端口 3001 上运行的节点服务器和在端口 3000 上运行的 React 代码。当 react fetches 时/api/user,您实际上想要http://localhost:3001/api/user,它指向您的节点服务器。

在您的生产环境中,您有一个服务器(也许是 nginx?),它将所有/api调用转发到您的节点进程,而对于其他所有内容,它为您的 react 主index.html文件提供服务react-router例如,您可以使用)。在这种情况下,无论何时您发出请求/api/user,都会由您的 Web 服务器处理并正确路由。