使用 Express 的 express.static 服务 HTML 文件时,HTML 内部引用的 CSS、JS 等资源必须使用以 / 开头的根相对路径(即从 根目录起始),而非 ../ 或 ./ 这类文件系统相对路径,否则浏览器会向错误的 URL 发起请求,导致 404 和 MIME 类型错误。
使用 Express 的 express.static 服务 HTML 文件时,HTML 内部引用的 CSS、JS 等资源必须使用以 / 开头的根相对路径(即从 根目录起始),而非 ../ 或 ./ 这类文件系统相对路径,否则浏览器会向错误的 URL 发起请求,导致 404 和 MIME 类型错误。
当通过 app.use(express.static(__dirname + "/public")) 启用静态服务后,Express 将 /public 目录映射为 Web 根路径(/)。这意味着:
http://localhost:4000/ 时,实际返回的是 /public/index.html;<script>、<link> 等标签中的 src 或 href 值,均以 Web 服务器的根路径(/)为基准解析,而非 HTML 文件在磁盘中的位置。因此,原始代码中使用 ../codebase/library.js 是错误的——它试图向上跳出当前 URL 路径(/),结果生成无效请求 http://localhost:4000/codebase/library.js,而 Express 并未将 /codebase/ 映射为有效路径(除非该目录真实存在于 /public/codebase/ 下且路径被正确引用)。
✅ 正确做法是统一使用根相对路径(root-relative path),即所有路径以 / 开头,明确指向 public 目录下的子路径:
<html><head><title>Planner</title><script src="/codebase/library.js" charset="utf-8"></script><link href="/codebase/library.css" rel="stylesheet" type="text/css" charset="utf-8"><link href="/styles.css" rel="stylesheet" type="text/css" charset="utf-8"></head><body><script src="/app.js" type="text/javascript"></script></body></html>
关键前提:这些路径必须与文件系统结构严格对应。例如:
/codebase/library.js → 要求文件实际位于 ./public/codebase/library.js
/styles.css → 要求文件实际位于 ./public/styles.css
/app.js → 要求文件实际位于 ./public/app.js
? 目录结构应如下所示:
/project-root├── server.js└── /public├── index.html├── styles.css├── app.js└── /codebase├── library.js└── library.css
? 补充说明:
http://localhost:4000/codebase/library.js),这会降低环境可移植性;express.static 默认不支持嵌套路径重写或别名,如需自定义挂载路径(如 /static),可显式指定前缀:app.use('/static', express.static('public')),此时 HTML 中路径需改为 /static/codebase/library.js;text/html 被当作 JS 执行)通常是 404 返回了 Express 默认的 HTML 错误页所致——根源仍是路径配置错误,修正路径后该警告自然消失。遵循根相对路径原则,即可确保 Express 静态服务与前端资源引用完全对齐,实现本地开发与生产部署的一致行为。