0

我想知道以下两个是否相同。

(1) app.use(express.static(__dirname + "/public"));
(2) app.use(express.static("public"));

因为我认为只要(2)存在于快速服务器中,浏览器就可以提供public位于根路径中的文件夹,而__dirname不是必需的。

但是,有时(2)在工作时不起作用,(1)例如如果我根据Route parameters在动态路由中渲染 ejs 文件。

它们之间究竟有什么区别?

4

1 回答 1

0

首先 __dirname 有 3 个用法,您可以查看文档

制作新目录

要在 index.js 文件中创建新目录,请将 __dirname 作为第一个参数插入 path.join() 并将新目录的名称作为第二个参数

const fs = require('fs');
const path = require('path');
const dirPath = path.join(__dirname, '/pictures');

fs.mkdirSync(dirPath);

指向目录

另一个独特的功能是它能够指向目录。在您的 index.js 文件中,声明一个变量并将 __dirname 的值作为 path.join() 中的第一个参数传递,将包含静态文件的目录作为第二个参数传递

express.static(path.join(__dirname, '/public'));

将文件添加到目录

您还可以将文件添加到现有目录。在您的 index.js 文件中,声明一个变量并将 __dirname 作为第一个参数,将要添加的文件作为第二个参数您要服务的目录,使用__dirname

const fs = require('fs');
const path = require('path');
const filePath = path.join(__dirname, '/pictures');

fs.openSync(filePath, 'hello.jpeg');

根据您的示例,我们不能使用 __dirname 但如果您从另一个目录运行 express 应用程序,则使用您要像这样服务的目录的绝对路径会更安全

app.use(express.static(__dirname + "/public"));
于 2021-01-21T16:34:43.933 回答