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

Node Express服务端返回旧版Angular构建产物问题咨询

问题排查原因及步骤

可能的核心原因

  • PM2工作目录不匹配:大概率是PM2启动时的工作目录和你上传新构建包的目录不一致,你替换的是其他目录的dist文件,PM2进程读取的还是旧版本目录下的资源,重启也不会生效。
  • 静态资源缓存配置错误:express.static默认开启强缓存,若之前两个版本部署时给index.html设置了过长的max-age,缓存未过期前就算更新了文件,也会返回旧版本内容;如果Nginx层额外配置了静态资源缓存或者路由,请求根本没有转发到Node服务,重启PM2也无效。
  • 路由配置冗余导致匹配异常:你当前配置了根路径、/index、/step1等多个路由指向同一个dist目录,路由匹配优先级混乱可能导致部分路径命中旧的静态资源规则。

排查验证步骤

  1. 校验PM2运行目录:执行pm2 show <你的进程名>,查看返回结果中的cwd(工作目录),确认该目录下的dist/mdb-angular-free是你上传新构建包的目录。
  2. 本地校验Node服务返回内容:在服务器终端执行curl http://localhost:<Node服务端口>/index.html,对比返回内容中引入的JS/CSS文件哈希值,和你本地最新构建产物的哈希是否一致。如果返回旧内容,直接执行md5sum <PM2工作目录>/dist/mdb-angular-free/index.html和本地构建的index.html的md5值对比,确认文件是否正确替换。
  3. 校验Nginx路由优先级:如果上一步curl返回的是新内容,说明请求被Nginx层拦截,检查Nginx配置中是否有location规则直接指向了旧的静态资源目录,或者配置了proxy_cache缓存了旧的响应内容。
  4. 修复静态资源路由配置:冗余的路由配置可以移除,SPA应用建议统一配置所有未匹配路由返回index.html,参考配置:
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, "dist/mdb-angular-free")));
app.use("/pdfs", express.static(path.join(__dirname, "pdfs")));
// 所有未匹配的路由返回SPA的index.html,支持history路由
app.get('*', (req, res) => {
  res.sendFile(path.join(__dirname, "dist/mdb-angular-free/index.html"));
});
  1. 新增缓存规则:给index.html配置不缓存的响应头,避免后续更新出现缓存问题,express.static参考配置:
app.use(express.static(path.join(__dirname, "dist/mdb-angular-free"), {
  setHeaders: (res, path) => {
    if (path.includes('index.html')) {
      res.setHeader('Cache-Control', 'no-store, no-cache, must-revalidate, proxy-revalidate');
    }
  }
}));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:36:04