如何在生产服务器上部署 React Frontend + Node Backend?
How to deploy React Frontend + Node Backend on a production server?
这是我第一次研究 React Frontend with Node Backend 这个话题。
我现在有一个小问题,我花了很多时间锁定解决方案但没有成功。
我开发了一个联系人表单,其中 react.js
和 antd
作为前端的设计和输入验证组件。对于后端部分,我使用节点 express
、cors
和 axios
来执行 Web 请求。作为包管理器,我使用 yarn
.
此联系表位于 public GitHub 存储库中:https://github.com/philippbck/react-nodemailer
在下方您可以找到我的 package.json
以及所有使用的依赖项:
{
"name": "react-nodemailer",
"version": "0.1.0",
"private": true,
"dependencies": {
"antd": "^3.19.1",
"axios": "^0.19.0",
"body-parser": "^1.19.0",
"cors": "^2.8.5",
"espress": "^0.0.0",
"nodemailer": "^6.2.1",
"react": "^16.8.6",
"react-dom": "^16.8.6",
"react-scripts": "3.0.1"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": "react-app"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
此联系表在我的本地计算机上运行良好,但现在我想将其部署到我的生产云服务器上,使用 CentOS7 和 Apache Web 服务器。但我的问题是如何?根据我的理解,我使用 yarn run build
为反应前端部分创建了一个生产版本,并将构建文件夹中的所有文件放在我服务器上的 htdocs 文件夹中。对于位于项目根目录中的后端文件 app.js
,我在服务器上创建了一个名为 /apps
的根文件夹。我在服务器上用节点应用程序手动启动了节点服务。
当我打开带有联系表的网站并单击提交按钮时,出现以下错误:
xhr.js:166 OPTIONS http://localhost:5000/send net::ERR_CONNECTION_REFUSED
我的问题是如何在生产服务器上部署联系表单以使其正常运行?对于这种情况,我不想使用无服务器解决方案。非常感谢!
更新:
将 axios POST url 从 "localhost" 更改为我的产品 url "philipp-buck.de" 后,现在出现以下错误:
OPTIONS https://philipp-buck.de:5000/send net::ERR_CONNECTION_TIMED_OUT
Contactform.js 有后端 URL 硬编码为 . localhot:5000 [https://github.com/philippbck/react-nodemailer/blob/master/src/contactform.js#L45]
您的生产前端需要指向生产后端。
您应该在 pm2
之前部署到生产环境
您是在 Back-end 启用 cors
还是在 Front-end 使用代理?
你应该回应你的 html
// in the beginning of app
app.use(express.static('public'));
// ...your code
// serves frontend application
app.get('/*', (req, res) => {
res.sendFile(path.resolve('public/index.html'), { root: __dirname }, err => {
if (err) {
res.status(500).send(err);
}
});
});
这是我第一次研究 React Frontend with Node Backend 这个话题。 我现在有一个小问题,我花了很多时间锁定解决方案但没有成功。
我开发了一个联系人表单,其中 react.js
和 antd
作为前端的设计和输入验证组件。对于后端部分,我使用节点 express
、cors
和 axios
来执行 Web 请求。作为包管理器,我使用 yarn
.
此联系表位于 public GitHub 存储库中:https://github.com/philippbck/react-nodemailer
在下方您可以找到我的 package.json
以及所有使用的依赖项:
{
"name": "react-nodemailer",
"version": "0.1.0",
"private": true,
"dependencies": {
"antd": "^3.19.1",
"axios": "^0.19.0",
"body-parser": "^1.19.0",
"cors": "^2.8.5",
"espress": "^0.0.0",
"nodemailer": "^6.2.1",
"react": "^16.8.6",
"react-dom": "^16.8.6",
"react-scripts": "3.0.1"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": "react-app"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
此联系表在我的本地计算机上运行良好,但现在我想将其部署到我的生产云服务器上,使用 CentOS7 和 Apache Web 服务器。但我的问题是如何?根据我的理解,我使用 yarn run build
为反应前端部分创建了一个生产版本,并将构建文件夹中的所有文件放在我服务器上的 htdocs 文件夹中。对于位于项目根目录中的后端文件 app.js
,我在服务器上创建了一个名为 /apps
的根文件夹。我在服务器上用节点应用程序手动启动了节点服务。
当我打开带有联系表的网站并单击提交按钮时,出现以下错误:
xhr.js:166 OPTIONS http://localhost:5000/send net::ERR_CONNECTION_REFUSED
我的问题是如何在生产服务器上部署联系表单以使其正常运行?对于这种情况,我不想使用无服务器解决方案。非常感谢!
更新:
将 axios POST url 从 "localhost" 更改为我的产品 url "philipp-buck.de" 后,现在出现以下错误:
OPTIONS https://philipp-buck.de:5000/send net::ERR_CONNECTION_TIMED_OUT
Contactform.js 有后端 URL 硬编码为 . localhot:5000 [https://github.com/philippbck/react-nodemailer/blob/master/src/contactform.js#L45]
您的生产前端需要指向生产后端。
您应该在 pm2
之前部署到生产环境您是在 Back-end 启用 cors
还是在 Front-end 使用代理?
你应该回应你的 html
// in the beginning of app
app.use(express.static('public'));
// ...your code
// serves frontend application
app.get('/*', (req, res) => {
res.sendFile(path.resolve('public/index.html'), { root: __dirname }, err => {
if (err) {
res.status(500).send(err);
}
});
});