首页 > 解决方案 > 部署到 AWS 时 Node.js api 不起作用

问题描述

我有一个 Node.js 应用程序,前端使用 React。当我在本地开发它时,我将项目放在 http://localhost/app 子目录下/api,api在下,我使用的端口是5000。一切正常。这是我设置的方式:

对于 Node.js,我使用它来设置前端目录和路由器:

const indexRouter = require('./routers')
app.use('/api', indexRouter)  //to set API path
app.use('/app', express.static('public')) 

服务器正在监听 5000。

对于 React,我将 package.json 更新为:

"homepage": "/app",
"proxy": "http://localhost:5000/"

对于 Axios 请求,我在请求路径的开头添加基本变量并将其设置为 '/api'

这在我的本地主机上都很好。但是,当我使用 Nginx 将其部署到 AWS 时,我无法使 API 请求成功。

使用 Nginx,我从

location / {
   try_files $uri $uri/ = 404;
}

location /app {
    proxy_pass http://localhost:5000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}

当我转到 时/root/app,我可以看到 React 的主页(我将 React 构建文件复制到 Node js 公用文件夹中)。但是,它无法获得请求成功。在我的localhost上可以看到,请求路径是http://localhost:3050/api/login,但是live服务器请求路径是http://domain_name/login,不知道为什么服务器不能去/apifor要求。

我希望有人可以帮助我。

标签: node.jsreactjsnginxamazon-ec2

解决方案


由于您使用 yarn build 构建了 React 应用程序,因此您将无法使用您在开发中使用的代理。该方法仅用于在开发中进行测试,而不是在生产中进行测试。你可以在这里阅读更多关于它的信息。


推荐阅读