Javascript 如何重定向React生产的端口

Javascript 如何重定向React生产的端口,javascript,node.js,linux,reactjs,express,Javascript,Node.js,Linux,Reactjs,Express,我试图在同一台Ubuntu服务器上安装Express.js和React.js应用程序。这是一个运行Plesk Onyx的VPS,其中有许多虚拟主机运行在端口80上 要继续运行它们,我已经安装并运行了,然后这些应用程序在端口3000和5000上启动(例如) 我执行命令: forever start -c "node src/server" ./ -l ./express.log forever start -c "npm start" ./ -l ./react.log 两个日志文件都不保存任何

我试图在同一台Ubuntu服务器上安装Express.js和React.js应用程序。这是一个运行Plesk Onyx的VPS,其中有许多虚拟主机运行在端口80上

要继续运行它们,我已经安装并运行了,然后这些应用程序在端口
3000
5000
上启动(例如)

我执行命令:

forever start -c "node src/server" ./ -l ./express.log
forever start -c "npm start" ./ -l ./react.log
两个日志文件都不保存任何内容,但这不是重点。这两个命令都像前面的命令行一样运行,但都在这些端口中运行

如何将此应用程序的至少React端口重定向到80?通常使用PHP应该可以工作
.htaccess
,但我不确定是否使用Nodejs

编辑:通过Express从React应用程序发送的表单代码(在使用
npm运行构建之前,React.js非常有效):

反应组分:

sendEmail(evt) {
    evt.preventDefault();
    (async () => {
        let response = await fetch(
            `${window.location.origin}/contacto`,
            options
        );
        let data = await response.json();

        if (!data.success) {
            this.setState(
                Object.assign(this.state, {
                    error: true,
                    texto: { error: <p>{data.message}</p> },
                    alert: {
                        visible: true,
                        tipo: "alert-danger"
                    }
                })
            );
        } else {
            this.setState(
                Object.assign(this.state, {
                    error: false,
                    texto: { error: <p>{data.message}</p> },
                    alert: {
                        visible: true,
                        tipo: "alert-success"
                    }
                })
            );
            document.getElementById("formulario-contacto").reset();
        }
    })();
}

假设您正在使用facebook上的CRA。 可以在项目的根文件夹中创建.env文件
并在其中指定端口=80

我不确定我是否完全理解这个问题,但由于您使用的是express,您将拥有一个
应用程序。请在index.js中的某个位置收听(3000)
呼叫


<>你可以将它更改为3000或80,这取决于代码< >进程.Env.NoDeEnEv,它将被设置为“生产”、“开发”或“否”。

看起来你可能想改变你的想法。你应该考虑把你的反应应用程序建立在静态输出中,然后用Exp.js APP/Server服务。

假设您使用的是create react应用程序,则可以运行“build”命令创建静态文件。然后将您的Express.js应用程序设置为服务于此。有关服务静态文件和为react应用程序生成静态文件的详细信息,请参阅

或者,如果您没有使用creat react应用程序,您也可以使用或构建您的react应用程序


要在端口80上获取express,您可以将端口变量设置为80,或直接在app.listen()函数
app.listen(80)中设置它

抱歉,我运行了错误的脚本。它工作得很好,但现在我在发送表单时遇到了一个空白屏幕。您是如何发送表单的,您的express应用程序中的路由可以处理它吗?如果您有代码,您可以共享它会更容易帮助。您尝试过自己设置url吗?他们的模板字符串可能不会传递它c正确地从窗口对象开始。
// Static site init
server.use("/", express.static("build"));

server.post("/contacto", (req, res) => {
  try {
    server.mailer.send(
      "email",
      {
        to: process.env.EMAIL_FROM,
        subject: `Contacto ${req.body.asunto}`,
        body: req.body
      },
      err => {
        if (err) {
          res.send({ success: false, message: err });
        } else {
          res.send({ success: true, message: "Mensaje enviado" });
        }
      }
    );
  } catch (err) {
    res.send({ success: false, message: err });
  }
});