Javascript 在apache服务器上部署React(3000)和Express(8000)应用程序

Javascript 在apache服务器上部署React(3000)和Express(8000)应用程序,javascript,node.js,reactjs,express,Javascript,Node.js,Reactjs,Express,我使用命令npx create React app client for React和npx Express generator api for Express后端创建了一个React+Express应用程序。客户端和API都在同一个文件夹应用程序下 react应用程序正在端口3000上运行,我已将express应用程序的端口更改为在/bin/ww中使用端口8000 在express应用程序中,我在routes/testAPI.js中创建了一条路由 在app.js文件中,我使用了路由来处理请求

我使用命令npx create React app client for React和npx Express generator api for Express后端创建了一个React+Express应用程序。客户端和API都在同一个文件夹应用程序下

react应用程序正在端口3000上运行,我已将express应用程序的端口更改为在/bin/ww中使用端口8000

在express应用程序中,我在routes/testAPI.js中创建了一条路由

在app.js文件中,我使用了路由来处理请求

let testAPIRouter = require("./routes/testAPI");
app.use("/testAPI", testAPIRouter);
现在在App.js文件中的react应用程序中,我调用了API并更新了{this.state.apiresponse}

的内容

App.js文件

class App extends React.Component{
   constructor(props){
       super(props);
       this.state = {
          apiResponse : "",
       }
    }
    apiCall = () => {
       fetch("http://localhost:8000/testAPI")
        .then(res => res.text())
        .then(res => this.setState({ apiResponse: res }));
    }
    componentWillMount = () => {
       this.callAPI();
    }
    
    render(){
        return(
          <div>
              <p>{this.state.apiResponse}</p>
          </div>
    )
   }
 }
我的问题是在apache服务器上部署此应用程序。当我运行express并在不同的端口3000和8000做出反应时。我可以使用npm run build构建react应用程序,它将为react创建静态构建文件。但是,如何构建与react一起使用的express应用程序? 是否将express文件移动到服务器并始终在端口8000处运行应用程序

我已经成功地在同一时间使用并发命令运行了这两个程序。我可以使用npm run dev运行应用程序。但是如何构建应用程序并从apache提供服务呢


提前感谢。

在react应用程序的package.json中使用代理

"proxy": "http://localhost:8000"
并且只使用路由而不是基本url来获取

fetch("/testAPI")
现在将React应用程序文件夹复制到您的Express文件夹 并将此脚本添加到Express的package.json中

"scripts": {
"client-install": "npm install --prefix reactapp",
"start": "node server.js",
"server": "nodemon server.js",
"client": "npm start --prefix reactapp",
"dev": "concurrently \"npm run server\" \"npm run client\""
},
快跑

npm run client-install
只跑了一次

npm run dev

要在react应用程序的package.json中同时运行服务器和客户端,请使用代理

"proxy": "http://localhost:8000"
并且只使用路由而不是基本url来获取

fetch("/testAPI")
现在将React应用程序文件夹复制到您的Express文件夹 并将此脚本添加到Express的package.json中

"scripts": {
"client-install": "npm install --prefix reactapp",
"start": "node server.js",
"server": "nodemon server.js",
"client": "npm start --prefix reactapp",
"dev": "concurrently \"npm run server\" \"npm run client\""
},
快跑

npm run client-install
只跑了一次

npm run dev

要同时运行服务器和客户端,需要修改react应用程序。用于使用不同的URL。将基本url定义为ENV

构建之后,它只是简单的HTML、CSS、JS应用程序,您也可以将其部署到子路径上

前。https://example.com/website

无需在端口上或使用Express部署react

但是如果你想达到这样的目标,你能做的就是
准备一个构建,将其放入express View文件夹中,并从express为react应用程序提供服务。

您需要修改react应用程序。用于使用不同的URL。将基本url定义为ENV

构建之后,它只是简单的HTML、CSS、JS应用程序,您也可以将其部署到子路径上

前。https://example.com/website

无需在端口上或使用Express部署react

但是如果你想达到这样的目标,你能做的就是
准备一个构建,将其放在express View文件夹中,并从express为您的react应用程序提供服务。

我感谢收到的所有答案。因此,作为我收到的答案的补充,我想提及我是如何将构建转移到生产中的

1. npm install -g pm2
2. sudo chmod 755 /server/build/server.js (build file)
3. sudo pm2 start /server/build/server.js (Adds to pm2 task)
4. sudo pm2 startup systemd
我在/etc/apche2/sites available/nodeapp.conf中创建了一个新的虚拟主机,并启用了这些apache模块 sudoa2enmod代理和sudoa2enmod代理

现在通过sudoa2ensite nodeapp.conf启用站点。重新加载服务器,点击localhost/node并启动

如果您遇到任何黑屏错误,请确保在react的package.json中添加以下内容。主页:http://localhost/node.


我很感激收到的所有答复。因此,作为我收到的答案的补充,我想提及我是如何将构建转移到生产中的

1. npm install -g pm2
2. sudo chmod 755 /server/build/server.js (build file)
3. sudo pm2 start /server/build/server.js (Adds to pm2 task)
4. sudo pm2 startup systemd
我在/etc/apche2/sites available/nodeapp.conf中创建了一个新的虚拟主机,并启用了这些apache模块 sudoa2enmod代理和sudoa2enmod代理

现在通过sudoa2ensite nodeapp.conf启用站点。重新加载服务器,点击localhost/node并启动

如果您遇到任何黑屏错误,请确保在react的package.json中添加以下内容。主页:http://localhost/node.


我试过这个。在我的例子中,start是./bin/www。但是我得到一个错误,上面写着sh:1:并发:未找到现在它工作正常。他失踪了。如何从apache构建服务?我已经尝试过了。在我的例子中,start是./bin/www。但是我得到一个错误,上面写着sh:1:并发:未找到现在它工作正常。他失踪了。如何从apache构建此服务?