【问题标题】:NODEJS : Front end and back end on different port?NODEJS:不同端口上的前端和后端?
【发布时间】:2021-06-16 10:11:03
【问题描述】:

我正在编写一个带有前端/后端的 NodeJS 网站。建议将文件分开,这样我的前端会通过 API 向我的后端请求数据。

将前端和后端放在同一台服务器上是一种好习惯吗?我需要在不同的端口上运行它们吗?

【问题讨论】:

  • 在内部可能是因为只有一个程序可以侦听一个端口,但您可以添加一个反向代理,如 nginx,以便在外部您只使用端口 80/443
  • 视情况而定。你的前端(我猜)是一个网络应用程序,它通过 http/ws/whatever 与你的后端对话。因此,您的前端应用程序本身不需要端口。将 nginx 作为 webserver 放在两者前面,并通过 nginx 为您的前端提供服务,并通过配置为反向代理的 nginx 将请求转发到您的 api。节点不应直接“作为婴儿前线”应用程序运行。

标签: javascript node.js


【解决方案1】:

在同一台服务器上拥有前端和后端并不是一个坏习惯,但如果您的前端是静态的,这也不理想。

如果您熟悉云提供商,您可以将静态前端文件放在云存储(AWS S3、Google 云存储或 Azure 存储...)上

要从同一台服务器提供前端和后端服务,您可以执行以下操作:

在您的 node.js 服务器中,您可以使用同一个 express 应用来为后端和前端提供服务。

在这个级别,您不必使用不同的端口,因为您必须创建两个在两个不同端口上侦听的 express 实例。

const express = require("express");
const router = express.Router();
const port = process.env.PORT || 3000;

const app = express();

/* serve your API */
app.use("/api", router);

/* serve your front (stored in the public folder) */
app.use("/", express.static("public"));

/* API routes */
router.get("/", (req, res) => {
  res.json({ data: "response to get" });
});

router.post("/", (req, res) => {
  res.json({ data: "response to post" });
});

app.listen(port, () => {
  console.log(`listening on port ${port} ...`);
});

最后,为了为最终用户提供前端和后端服务,您可以使用 Nginx 作为反向代理服务器,配置两个不同的端口,还可以支持 HTTPS

【讨论】:

    【解决方案2】:

    是的,你不能监听已经在使用的端口 在随机端口上运行 nodejs 服务器并使用 web 服务器(nginx、apache ...)为前端提供服务

    【讨论】:

      猜你喜欢
      • 2023-04-07
      • 2019-06-29
      • 2018-09-21
      • 2021-05-22
      • 2018-04-21
      • 1970-01-01
      • 2017-01-21
      • 2021-12-16
      • 2020-02-12
      相关资源
      最近更新 更多