node.js - 部署到 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,不知道为什么服务器不能去/api
for要求。
我希望有人可以帮助我。
解决方案
由于您使用 yarn build 构建了 React 应用程序,因此您将无法使用您在开发中使用的代理。该方法仅用于在开发中进行测试,而不是在生产中进行测试。你可以在这里阅读更多关于它的信息。
推荐阅读
- laravel - 当我使用 get() 时,在 laravel 查询中返回错误 500
- javascript - 如何在javascript中比较两个对象数组?
- c# - 如何在 GeckoFx 组件的 C# 中更改页面语言
- javascript - 将 AngularJS 服务转换为 typescript 文件
- ios - TEMP FIX - 构建和上传 iOS 应用程序博览会(没有应用程序加载器)
- excel - Hod 使用 VBA 将数据从一张表复制到另一张表,列选择有限
- vue.js - Vue2leaflet 标记簇未显示
- drupal-8 - 服务文件“core/core.services.yml”无效
- sas - SAS中的列而不是行中的日期 - 优点?
- nativescript - 对象原型可能只是一个对象或 null: undefined Nativescript Angular