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

为何express.static传入相对路径与拼接__dirname的路径效果一致

这两种写法效果一致,是因为你启动Node进程的工作目录刚好让二者解析出的目标路径完全相同,具体逻辑如下:

  • 第一种app.use(express.static('public'))的解析逻辑
    当你给express.static传入相对路径时,Express会将该路径和*Node进程启动时的当前工作目录(CWD)*做拼接得到最终的静态资源目录。
    你运行服务时大概率是在项目根目录(也就是public和src文件夹的父级目录)执行的启动命令,比如node src/app.js,此时进程的CWD就是项目根目录,拼接public后得到的路径就是根目录下的public文件夹,刚好是静态资源的正确存放位置。
  • 第二种app.use(express.static(path.join(__dirname, '..', 'public')))的解析逻辑
    Node.js中__dirname是内置变量,它的值永远是当前执行的JS文件(这里就是src/app.js)所在目录的绝对路径。按你的目录结构,__dirname的值就是<项目根目录路径>/src,拼接..(上级目录)后回到项目根目录,再拼接public,最终得到的绝对路径同样是根目录下的public文件夹。

注意:第一种相对路径的写法是不稳定的。如果你切换启动目录,比如进入src文件夹下执行node app.js,此时进程CWD是src目录,express.static('public')会尝试寻找src/public目录,该路径不存在,访问静态资源就会返回404。而第二种基于__dirname的绝对路径写法,不管你在哪个目录启动进程,都能正确定位到public文件夹,是生产环境更推荐的写法。

内容的提问来源于stack exchange,提问作者Ghost

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:24:04