为什么使用path.join()而不是静态('public')

在我读过的所有节点快速教程中,以下语法用于创build公用目录:

var path = require('path'); app.use(express.static(path.join(__dirname, 'public'))) 

但是下面的工作很好:

 app.use(express.static('public')) 

那么为什么我会使用path模块呢?

最后一个例子使用了一个相对path,如果你从具有public子目录的目录开始你的应用程序,这个path就可以工作。

但是,如果您从另一个目录启动您的应用程序,它将会中断。 假设您的应用程序位于/path/to/app/directory但在/tmp是当前(工作)目录时启动脚本:

 /tmp$ node /path/to/app/directory/app.js 

在这种情况下,Express将尝试使用/tmp/public作为静态文件的位置,这是不正确的。

使用path.join(__dirname, 'public')将创build一个绝对path,使用app.js所在的目录作为基础。 在上面的示例中,它将parsing为/path/to/app/directory/public ,如果从另一个工作目录启动脚本,这也是有效的。