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

Ubuntu下Node.js Express public/js静态文件无法访问问题

问题原因

这个问题本质上是Ubuntu文件系统默认严格大小写敏感,和你之前用的Windows、MacOS默认的大小写不敏感规则不一致。
Windows、默认配置的MacOS文件系统不会区分路径中的大小写:代码里写/js,不管实际文件夹叫js、JS还是Js,系统都能正常匹配到对应目录返回资源。但Ubuntu常用的ext4、xfs文件系统对路径大小写是精确匹配的,只要名称大小写、字符有一点不一致,就会直接判定路径不存在。

排查修复步骤
  • 核对目录实际名称
    进入项目public目录执行ls -la,查看存放脚本的目录实际名称,90%以上的概率你会看到目录名不是全小写的js,而是JS、Js这类大小写混合的命名——这就是为什么改目录名就能正常访问,用js名就报错。
    修复方式二选一即可:
    • 把目录重命名为全小写js,和代码里写的路径完全一致
    • 把代码里静态资源配置的路径改成和实际目录名完全匹配的大小写
  • 检查中间件注册顺序
    确认express.static相关的配置代码,写在所有匹配/js前缀的自定义路由、其他业务中间件之前。Express是按代码注册顺序匹配请求的,如果前面的逻辑提前拦截了/js开头的请求,根本不会走到静态资源服务的逻辑,也会返回404。
  • 排查特殊字符/权限问题
    如果核对完大小写还是有问题:
    • 删掉现有js目录,在Ubuntu环境下直接执行mkdir -p public/js新建目录,再把原有脚本文件移进去,避免跨系统同步时目录名带上不可见的特殊字符导致匹配失败
    • 执行ls -l public/查看js目录权限,确保运行Node服务的账号对该目录及内部文件有读、执行权限,权限不足时执行sudo chmod -R 755 public/js修复即可。

内容的提问来源于stack exchange,提问作者Csaba Horváth

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 11:31:11