Node.js Express项目中如何定位上级目录以读取指定文件?
问题原因
- __dirname 是当前执行脚本所在的目录路径,末尾不会自动携带路径分隔符
/,直接拼接../client-side/public/index.html会生成非法无效路径。举个例子,如果你的服务端代码存放在项目根目录下的server文件夹中,__dirname 的值为/你的项目路径/server,直接拼接后得到的路径是/你的项目路径/server../client-side/public/index.html,系统无法识别该路径。 - 手动拼接路径存在跨操作系统兼容问题,Windows和类Unix系统的路径分隔符规则不同,手动写斜杠容易引发异常。
修复方案
首先引入Node.js内置的path模块,该模块会自动适配不同操作系统的路径规则:
const path = require('path');
修改你的路由代码,使用path.join方法拼接路径即可正常访问目标文件:
app.get('/', (req, res) => { res.sendFile(path.join(__dirname, '../client-side/public/index.html')); });
拓展优化
如果你需要托管public目录下的所有静态资源(包括css、js、图片等),更推荐使用express内置的静态资源托管中间件,配置后访问根路径会自动返回目录下的index.html,无需单独写对应路由:
app.use(express.static(path.join(__dirname, '../client-side/public')))
内容的提问来源于stack exchange,提问作者Exavier
相关产品推荐
相关产品推荐

