You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js部署两个Angular应用,实现共享/login路由需求

解决方案

核心思路

Express路由是按定义顺序匹配的,因此需将/app2/login的特殊跳转规则放在最前端,再处理app2的常规路由,最后兜底处理默认路由。同时必须正确托管两个Angular应用的静态资源,避免添加路由后静态文件(JS、CSS、图片等)加载失效。

修改后的完整server.js配置

const express = require('express');
const path = require('path');
const app = express();

// 1. 先托管两个应用的静态资源(必须放在路由定义前)
// 托管app1的静态文件,对应根路径
app.use(express.static(path.join(__dirname, 'dist/DineNGo')));
// 托管app2的静态文件,指定路径前缀为/app2
app.use('/app2', express.static(path.join(__dirname, 'dist/DineNGo-Square')));

// 2. 优先处理/app2/login的跳转需求
app.get('/app2/login', function(req, res) {
    res.sendFile(path.join(__dirname, 'dist/DineNGo/index2.html'));
});

// 3. 处理app2的其他常规路由
app.get('/app2', function(req, res) {
    res.sendFile(path.join(__dirname, 'dist/DineNGo-Square/index.html'));
});
app.get('/app2/*', function(req, res) {
    // 已匹配过的/login路由不会走到这里,直接返回app2的主页
    res.sendFile(path.join(__dirname, 'dist/DineNGo-Square/index.html'));
});

// 4. 兜底处理所有未匹配的路由,返回app1的index2.html
app.get('*', function(req, res) {
    res.sendFile(path.join(__dirname, 'dist/DineNGo/index2.html'));
});

// 启动服务器(可根据需求调整端口)
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
    console.log(`Server running on port ${PORT}`);
});

关键细节说明

  • 静态资源托管顺序:必须在路由规则前配置express.static,否则静态文件会被后续的路由拦截规则屏蔽,导致应用样式、脚本加载失败。给app2的静态资源指定/app2前缀,确保请求/app2下的静态文件时能正确映射到对应目录。
  • 路由匹配优先级:/app2/login的路由必须放在/app2/*前面,否则会被通配路由优先匹配,无法触发跳转逻辑。
  • 前端无侵入:所有规则均在服务器端完成,无需修改app2的任何前端代码。

内容的提问来源于stack exchange,提问作者coder123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 19:12:38