reactjs - 使用域 http://example.com 的 express 后端构建 React 应用程序
问题描述
我在 React 中有一个 Web 应用程序,我需要实现一个联系表单。该应用程序是使用 create-react-app 创建的,并添加了服务器文件夹。对于我使用 sendgrid 邮件的表单。服务器是否在端口 4567 上工作,应用程序如何构建以在域上工作?这是一个单页应用程序。
谢谢,这很重要。
解决方案
在生产环境中运行时,React 应用程序是简单的 HTML、CSS 和 JavaScript。这些文件在请求时从您的服务器发送到客户端,其方式与处理任何网页的请求/响应相同。在您的 React 应用程序准备好投入生产之前,需要完成几个步骤
1:创建生产版本
首先,您需要创建应用程序的生产版本。此过程将所有单独的文件.js
或.jsx
文件放在一起到一个缩小的文件中,对于.css
. 然后你index.html
的更新包含link
到 CSS 和script
JS 中。这样做是为了只需要发送三个文件,而不是开发中存在的 10 个或 100 个文件。
如果您曾经create-react-app
启动过您的应用程序,则可以使用以下命令:
npm run build
去做这个。否则,你需要安装webpack,然后运行:
node_modules/.bin/webpack --config webpack.prod.js --mode production
(您可能希望将其作为脚本添加到package.json
)。
有关更多信息,请参阅React:优化性能。
2. 提供您的应用程序
现在,您的服务器应该为您的应用程序提供一条路由,并且当它在该路由上收到请求时,服务器应该通过index.html
从您的client/build/
目录(client/
React 应用程序的目录在哪里)发送来响应。
这是一个使用 Node/Express 作为服务器的示例(在 中app.js
):
const path = require('path');
app.get('*', (req, res) => {
res.sendFile(path.join(__dirname), 'client', 'build', 'index.html');
});
请注意,这只是使用 Node 发送静态文件的方式,并且可以在任何服务器上轻松完成。
额外的
您提到您想在申请中提交表格。如果您接收 POST 请求的路由与表单所在的路由匹配(例如,表单已打开/form
,服务器侦听 POST on /form
),您可以只使用默认的 HTML 表单提交。然而,在使用 React 时,这不是一个很好的处理方式,因为路由将由您的服务器而不是由 React 控制。相反,您应该使用某种 AJAX 方法来提交表单。
由于您的服务器现在正在为您的 React 应用程序提供服务(而不是 React 在开发中为自己服务),您只需发出相关请求,这些请求就会发送到您的服务器。例如请求(使用 fetch API):
const models = await fetch('/api/models');
将your_host/api/models
默认设置为。
推荐阅读
- asynchronous - 无法从 AWS lambda 调用 AWS Cognito API,但相同的代码在本地 node.js 中运行良好
- vue.js - 如何使用 vue/vuex 从输入中过滤数据?
- python - 基本循环算法的时间复杂度
- mongodb - Mongo 的聚合帮助 - 为什么硬编码有效而不是 req.body?
- airflow - 如何防止气流中的“执行失败:[Errno 32] Broken pipe”
- android - 在连接的设备上运行颤振应用程序时出现问题
- shopify - 调用 page_title 到 Shopify 页面内容
- kotlin - 从 Mono 列表中获取第一个 onNext 信号
- javascript - ajax POST 调用中的土耳其语字符已损坏
- php - 如何使用幻灯片在 php 中显示数据库中的多个图像