使用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

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

相关推荐
zhensherlock18 小时前
Protocol Launcher 系列:Trello 看板管理的协议自动化
前端·javascript·typescript·node.js·自动化·github·js
iNgs IMAC1 天前
如何在Windows系统上安装和配置Node.js及Node版本管理器(nvm)
windows·node.js
ZJY1321 天前
3-12:路由和重构
后端·node.js
亿牛云爬虫专家1 天前
告别空壳HTML!Node.js + Playwright + 代理IP 优雅抓取动态网页实战
node.js·html·爬虫代理·动态网页·数据抓取·代理ip·playwright
Z_Wonderful1 天前
微前端:Webpack 配置 vs Vite 配置 超清晰对比
前端·webpack·node.js
不会敲代码11 天前
MCP 进阶实战:用 LangChain 将 MCP 工具集成到你的 AI Agent 程序
langchain·node.js·mcp
2601_949816681 天前
Node.js v16 版本安装
node.js
.ZGR.1 天前
【全栈实战】搭建属于你的AI图像生成平台:从Java Swing 到 Web 应用
java·人工智能·node.js
invicinble1 天前
前端技术栈--webpack
前端·webpack·node.js
eRRA OFAG2 天前
Windows 上彻底卸载 Node.js
windows·node.js