使用node部署多个前端项目并实现后端接口转发

在 Node.js 服务器中部署前端文件,并且需要转发后端接口请求的情况下,可以使用代理服务器或中间件来实现接口的转发。可以使用 http-proxy-middleware 中间件来转发接口请求.

1. 安装 express

复制代码
npm install express

2.安装 http-proxy-middleware

复制代码
npm install http-proxy-middleware

3.创建一个 Node.js 服务器,使用 express 框架和 http-proxy-middleware 中间件

php 复制代码
const express = require('express');
const path = require('path');
const { createProxyMiddleware } = require('http-proxy-middleware');
​
const app = express();
const port = 3000;
​
// 静态文件目录,假设前端代码构建后的文件在 "dist" 目录中
app.use(express.static(path.join(__dirname, 'dist')));
​
// 设置代理,将以 "/api" 开头的请求转发到后端服务器
app.use('/api', createProxyMiddleware({ target: 'http://backend-api-server', changeOrigin: true }));
​
// 所有路由都返回 index.html,交由前端路由处理
app.get('*', (req, res) => {
  res.sendFile(path.join(__dirname, 'dist', 'index.html'));
});
​
// 启动服务器
app.listen(port, () => {
  console.log(`Server is running at http://localhost:${port}`);
});
​
  • express.static 中间件用于提供静态文件服务。
  • createProxyMiddleware 用于设置代理,将以 "/api" 开头的请求转发到后端 API 服务器。你需要将 'http://backend-api-server' 替换为实际的后端 API 地址。
  • 对于其他路由,都返回前端的 index.html,由前端路由处理。

4.部署多个前端工程

javascript 复制代码
const express = require('express');
const path = require('path');
const { createProxyMiddleware } = require('http-proxy-middleware');
​
const app1 = express();
const app2 = express();
const port = 3000;
​
// 静态文件目录,假设前端代码构建后的文件在各自的 "dist" 目录中
app1.use(express.static(path.join(__dirname, 'frontend1', 'dist')));
app2.use(express.static(path.join(__dirname, 'frontend2', 'dist')));
​
// 路由配置
app1.get('/', (req, res) => {
  res.sendFile(path.join(__dirname, 'frontend1', 'dist', 'index.html'));
});
​
app2.get('/', (req, res) => {
  res.sendFile(path.join(__dirname, 'frontend2', 'dist', 'index.html'));
});
​
// 设置代理,将以 "/api" 开头的请求转发到后端服务器
app.use('/api', createProxyMiddleware({ target: 'http://backend-api-server', changeOrigin: true }));
​
// 启动服务器
app1.listen(port + 1, () => {
  console.log(`Frontend 1 is running at http://localhost:${port + 1}`);
});
​
app2.listen(port + 2, () => {
  console.log(`Frontend 2 is running at http://localhost:${port + 2}`);
});
​

确保你的前端工程文件结构类似如下:

lua 复制代码
project-root
|-- frontend1
|   `-- dist
|       |-- index.html
|       |-- ...
|-- frontend2
|   `-- dist
|       |-- index.html
|       |-- ...
|-- server.js

5.在后台运行node服务

在 Linux 中,你可以使用 nohup 命令将 Node.js 服务在后台运行。

5.1 打开终端,进入到你的 Node.js 项目目录

5.2 运行以下命令

bash 复制代码
nohup node your_server_file.js &
  • your_server_file.js 是你的 Node.js 服务器入口文件。
  • nohup 是一个命令,用于使命令在后台运行,并忽略挂断信号。
  • & 表示将命令放到后台运行。

5.3 检查是否成功启动,可以查看 nohup.out 文件

bash 复制代码
cat nohup.out

这个文件会包含 Node.js 服务器的输出日志.

如果你希望后台运行的同时保存日志,可以使用 nohup 的输出重定向

bash 复制代码
nohup node your_server_file.js > your_log_file.log 2>&1 &

your_log_file.log 是你想要保存日志的文件名。

在生产环境中,可能需要使用更高级的工具来管理 Node.js 进程,例如 pm2pm2 提供了更多的功能,如进程守护、自动重启、性能监控等,可以更方便地管理 Node.js 应用。

6. 使用pm2来管理node应用

pm2 是一个强大的 Node.js 进程管理工具,它提供了许多有用的功能,如进程守护、自动重启、性能监控等.

6.1 安装 pm2

复制代码
npm install -g pm2

6.2 启动 Node.js 应用

sql 复制代码
pm2 start your_server_file.js

6.3 查看运行中的进程列表

复制代码
pm2 list

6.4 停止应用

arduino 复制代码
pm2 stop your_app_name_or_id

your_app_name_or_id 是你启动的应用的名称或 ID,可以在 pm2 list 中查看。

6.5 重启应用

复制代码
pm2 restart your_app_name_or_id

6.6 删除应用

arduino 复制代码
pm2 delete your_app_name_or_id

6.7 查看日志

复制代码
pm2 logs your_app_name_or_id

6.8 监控应用性能

复制代码
pm2 monit

这将打开一个监控界面,显示应用的 CPU 和内存使用情况。

6.9 自动启动

复制代码
pm2 startup

使用命令将应用设置为系统启动时自动启动

相关推荐
昭昭日月明20 小时前
搭建高可用私有 NPM 镜像
node.js·代码规范
七牛云行业应用1 天前
保姆级 OpenClaw 避坑指南:手把手教你看日志修 Bug,顺畅连通各大 AI 模型
人工智能·后端·node.js
多厘1 天前
使用 nvm 管理多版本 Node 项目依赖
node.js
前端双越老师2 天前
Skills 是什么?如何用于 Agent 开发?
人工智能·node.js·agent
San303 天前
AI 时代的“USB-C”接口:MCP 核心原理与实战
langchain·node.js·mcp
helloweilei4 天前
javascript 结构化克隆
javascript·node.js
小蜜蜂dry5 天前
nestjs学习 - 控制器、提供者、模块
前端·node.js·nestjs
San305 天前
手写 Mini Cursor:基于 Node.js 与 LangChain 的开发实战
langchain·node.js·agent
前端付豪5 天前
Nest 项目小实践之图书增删改查
前端·node.js·nestjs
sunny_6 天前
面试踩大坑!同一段 Node.js 代码,CJS 和 ESM 的执行顺序居然是反的?!99% 的人都答错了
前端·面试·node.js