【发布时间】:2019-12-23 23:21:41
【问题描述】:
如何在生产模式下将我的 react-app 与 express 一起使用?
目前我在一个终端调用yarn run start,在另一个终端调用node server.js。
这在开发模式下工作得很好。我在 package.json (http://localhost:8080) 中添加了"proxy"。
问题是我不知道如何让它在实时模式下工作。
我只是打电话给yarn build,但是现在服务器正在运行是没有意义的;-)
我可以用简单的方法解决这个问题吗?
一些代码:
package.json
"proxy": "http://localhost:8080"
server.js
const app = express();
app.post("/checkout", async (req, res) => {
...
});
app.listen(8080);
在 react-app 中,我使用 axios 将数据发布到此 API。
我在开发模式下得到/想要什么:
来自 API 的正确响应。
我想要的产品模式:
来自 API 的正确响应。
我在 prod 模式下得到的结果:
错误:404(在我看来,因为服务器没有运行)
文件夹结构:
my-app
├── build
├── node_modules
├── public
│ ├── favicon.ico
│ ├── data
│ ├── index.html
│ └── manifest.json
├── scripts
│ ├── build.js
│ ├── start.js
├── src
│ ├── components
│ │ Component1.js, Component2.js, ...
│ ├── App.js
│ ├── index.css
│ ├── index.js
│ └── serviceWorker.js
├── .gitignore
├── package.json
├── server.js
└── README.md
我可以使用 netlify 的 Lambda 函数解决这个问题吗?
这是服务器脚本: server.js
const express = require("express");
const ... require(...);
const app = express();
app.post("/checkout", async (req, res) => {
console.log("Request:", req.body);
let error;
let status;
try {
const { token } = req.body;
const var1 = await stripe.customers.create({
...
});
const idempotency_key = uuid();
const charge = await stripe.charges.create(
{...}
);
}
res.json({ ... });
});
app.listen(8080);
其他方式:是否可以在 php 服务器上运行结帐 api?
【问题讨论】:
-
yarn build将为您提供应用程序的生产版本,而不涉及server。您的服务器必须正在运行,我建议您部署它。 -
请分享您的项目文件夹结构。
-
感谢您的回答!我怎样才能做到这一点?我使用 netfliy 使用 build 命令发布我的 react 应用程序:yarn build 文件夹结构:ibb.co/KV6RpXp
-
您将需要使用 Netlify Lambda 函数或将您的 API 托管在另一台服务器上。所有这些试图解决部署在服务器上的 React 应用程序的答案都不理解 Netlify,只是令人困惑。 Netlify 不在已部署的站点上运行服务器。如果您可以显示 server.js 的代码和它使用的任何代码,它会更容易回答。
-
我更新了问题并添加了 server.js 代码。非常感谢您的帮助。
标签: reactjs express create-react-app netlify