Node.js+Express如何通过根路径(/)托管根目录下的静态文件
Express 项目根目录静态文件托管实现方案
正确实现代码
你的入口文件index.js本身就在项目根目录,直接用Node.js全局变量__dirname(代表当前执行脚本所在目录的绝对路径)作为express.static的传入参数即可,不需要额外拼接子路径:
const express = require('express'); const app = express(); // 核心配置:将项目根目录设为静态资源托管目录 app.use(express.static(__dirname)); // 其他业务路由写在静态资源配置之后 app.listen(3000, () => { console.log('服务已启动'); });
配置完成后,根目录下的所有静态文件都会自动映射到对应路由:
- 根目录下的
index.html会在访问/时自动返回 - 根目录下的
about.html访问路径为/about.html - 根目录下的静态资源如
style.css、logo.png等都可以通过对应路径直接访问
此前方案失效原因
- 方案1、2仅注册了
GET /单条路由,只实现了访问根路径时返回单个html文件的逻辑,根本没有做全量静态资源托管,根目录下其他文件都无法被访问。其中方案2传入path.join(__dirname, '/')实际指向磁盘系统根目录,和项目目录无关,只是巧合下返回index.html的效果和方案1一致。 - 方案3传入
'/'作为静态目录参数,指向的是操作系统的磁盘根目录,而非你的项目根目录,服务找不到对应文件自然返回Cannot GET /错误。 - 方案4传入空字符串作为静态目录参数,不符合
express.static的参数校验规则,所以启动时直接抛出Path cannot be empty错误。
安全提示
不建议在生产环境直接托管项目根目录:该配置会把根目录下所有文件(包括源码文件
index.js、依赖配置package.json、存放在根目录的敏感配置如.env等)全部对外公开,存在严重的敏感信息泄露风险。生产环境请将所有需要对外访问的静态文件统一存放在public等独立子目录中,仅托管该子目录即可。
内容的提问来源于stack exchange,提问作者Fun X Time
相关产品推荐
相关产品推荐

