Node.js 如何让我的React应用程序指向生产中的Node/Express API。代理仅在dev中有效。

Node.js 如何让我的React应用程序指向生产中的Node/Express API。代理仅在dev中有效。,node.js,reactjs,express,nginx,Node.js,Reactjs,Express,Nginx,我对节点/反应有点陌生 我有一个API/express节点应用程序,在该应用程序中我有一个react应用程序。react应用程序具有axios.get命令和其他API调用。react应用程序找到我执行的API调用,并将它们转发到react应用程序的package.json中我设置的代理。在dev中,代理看起来像这样:“proxy”:“”,但现在我正在投入生产,我正试图将此代理更改为在“proxy”中托管node express应用程序的URL:“” 当我将项目转移到生产环境时,我将端口83设置为

我对节点/反应有点陌生

我有一个API/express节点应用程序,在该应用程序中我有一个react应用程序。react应用程序具有axios.get命令和其他API调用。react应用程序找到我执行的API调用,并将它们转发到react应用程序的package.json中我设置的代理。在dev中,代理看起来像这样:“proxy”:“”,但现在我正在投入生产,我正试图将此代理更改为在“proxy”中托管node express应用程序的URL:“”

当我将项目转移到生产环境时,我将端口83设置为API节点应用程序,将端口84设置为react应用程序(使用nginx)。不管出于什么原因,我的react应用程序都不知道如何对节点应用程序执行API请求。。我得到的是空白数据

在谷歌搜索之后,我意识到,“代理”设置只适用于向开发服务器发出的请求。通常在生产环境中,您有一个服务器,它提供初始页面html,还提供api请求。因此对/api/foo的请求自然有效;您不需要指定主机

这就是我想弄明白的部分。如果有人能告诉我如何设置我的应用程序,使/api/foo自然工作,我将不胜感激

我试着把它设置好。就方法而言,这可能是一个彻底的失败,但为时已晚,我会在这个问题上睡着的。。我应该让nginx句柄在一个语句文件中同时提供静态html和请求?到目前为止我已经知道了,但我可能离这里很远

server {
  listen 84;
  server_name 168.235.83.194;


  root /home/el8le/workspace/notes/client/build;

  index index.html index.htm;
  location / {
  }

  location /api{
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-NginX-Proxy true;
    proxy_pass http://168.235.83.194:83/; //I have nginx hosting my API app on this port. Not even sure if this should be like this?
    proxy_ssl_session_reuse off;
    proxy_set_header Host $http_host;
    proxy_cache_bypass $http_upgrade;
    proxy_redirect off;
  }

}`
此外,如果您想更好地了解我的位置,我实际上是在这些ip地址上托管的:


在进行数据请求时,您必须提供实际的API URL。开发服务器能够代理到不同的API URL。因此,如果应用程序使用DEV Server加载,任何数据请求(如/api/customers)都将转到,而DEV代理服务器将通过管道将其发送到

但在生产中,当您发出相同的请求时,它将使用您的应用程序的基址并尝试从中获取数据

正确的处理方法是使用绝对URL而不是相对URL。由于生产和开发将具有不同的基本URL,请在配置变量中维护它们,然后将特定的api地址附加到此基本地址,例如:
${Base\u URL}/api/customers
,其中基本URL将位于开发和开发中