为什么使用path.join()而不仅仅是static('public')

Wil*_*iam 5 node.js express

在所有节点表达教程中,我读过以下语法用于创建公共目录:

var path = require('path');
app.use(express.static(path.join(__dirname, 'public')))
Run Code Online (Sandbox Code Playgroud)

但是以下工作正常:

app.use(express.static('public'))
Run Code Online (Sandbox Code Playgroud)

那么我为什么要使用路径模块呢?

rob*_*lep 12

最后一个示例使用相对路径,如果从具有public子目录的目录启动应用程序,该路径将起作用.

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

/tmp$ node /path/to/app/directory/app.js
Run Code Online (Sandbox Code Playgroud)

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

使用path.join(__dirname, 'public')将创建一个绝对路径,使用app.js位于其中的目录作为基础.在上面的示例中,它将解析为/path/to/app/directory/public,如果从另一个工作目录启动脚本,它也将有效.