使用域名http://example.com的快速后端构建React应用

时间:2018-10-01 14:50:01

标签: reactjs forms express contacts

我在React中有一个Web应用程序,我需要实现一个联系表。使用create-react-app创建应用程序,并添加服务器文件夹。对于表单,我使用了sendgrid邮件。服务器在端口4567上工作吗,应用程序如何构建才能在域上工作?这是一个一页的应用程序。

谢谢,这很重要。

2 个答案:

答案 0 :(得分:0)

在package.json中添加

"proxy": "http://localhost:4567"

答案 1 :(得分:0)

在生产环境中运行时,React应用程序是简单的HTML,CSS和JavaScript。这些文件在被请求时从服务器发送到客户端,其处理方式与处理任何网页的请求/响应相同。在您的React应用准备好投入生产之前,需要完成一些步骤

1:创建生产版本

首先,您需要创建应用的生产版本。此过程将所有单独的.js.jsx文件都放到一个缩小的文件中,对于.css也是一样。然后,您的index.html被更新为在CSS中包含link,在JS中包含script。这样做是为了只发送三个文件,而不是开发中存在的10或100。

如果您使用create-react-app启动应用程序,则可以使用以下命令:

npm run build

为此。否则,您需要安装webpack,然后运行:

node_modules/.bin/webpack --config webpack.prod.js --mode production

(您可能希望将其作为脚本添加到package.json)。

有关更多信息,请参见React: Optimizing Performance

2。服务您的应用程序

现在,您的服务器应具有用于您的应用程序的路由,并且在该路由上收到请求时,服务器应通过从您的index.html目录(其中client/build/ React应用的目录)。

以下是一个使用Node / Express作为服务器的示例(在client/中):

app.js

请注意,这只是使用Node发送静态文件的方式,并且可以在任何服务器上轻松完成。

其他

您提到要与您的申请一起提交表格。如果您的接收POST请求的路由与表单所使用的路由匹配(例如,表单在const path = require('path'); app.get('*', (req, res) => { res.sendFile(path.join(__dirname), 'client', 'build', 'index.html'); }); 上并且服务器在/form上侦听POST),则可以使用默认的HTML表单提交。但是,这不是使用React时做事的好方法,因为路由将由您的服务器而不是React控制。相反,您应该使用某种AJAX方法提交表单。

由于您的服务器现在正在提供您的React应用程序(而不是像在开发中那样由React提供服务),因此您只需提出相对请求,这些请求就会发送给您的服务器。例如,请求(使用fetch API):

/form

默认情况下将设为const models = await fetch('/api/models');