Express静态文件(CSS/JS/图片)在Railway上返回404,但在本地可以正常工作

前端开发 2026-07-10

我的Express.js应用在本地能完美提供静态文件,但在Railway上所有CSS、JS和图片都返回404。HTML能正常加载。

  • Node.js 22、Express、EJS模板、ES模块("type": "module"
  • 静态文件位于 /public 文件夹(CSS位于根目录,图片在 /public/images,JS在 /public/js
  • 部署在Railway上

静态中间件:

js

app.use(express.static(path.join(__dirname, 'public')));

EJS链接:

html

<link rel="stylesheet" href="/main.css">
<script src="/js/home.js"></script>

Railway日志显示:

❌ 404 - Not Found: /images/fireplace3.jpg
❌ 404 - Not Found: /js/home.js

我尝试的方法:

  • 使用带有 path.join(__dirname, 'public') 的绝对路径 ✅
  • setHeaders 设置显式的MIME类型头 ✅
  • 检查Helmet CSP ✅
  • 修复 .gitignore

我发现的根本原因: 一个Gatsby模板的 .gitignore 列出了 public,导致整个文件夹从Git中排除,因此也从Railway的部署容器中排除了。

问题: 有没有更早发现的更好方法?以及在Railway上专门用于静态资源的推荐模式,能避免这个坑吗?

解决方案

如果是我,我会始终验证已部署的文件系统。Railway平台允许你打开正在运行的容器的Shell。

ls -la // this shows all files and folder in the current directory
ls -la public //shows everything inside the public folder, including hidden files.

一旦看到情况异常,立即执行那条命令。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章