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
相关产品推荐
相关产品推荐

