Express静态文件(CSS/JS/图片)在Railway上返回404,但在本地可以正常工作
我的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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。