【问题标题】:Difference between app.use(express.static(__dirname + '/public')) and app.use(express.static('public'));app.use(express.static(__dirname + '/public')) 和 app.use(express.static('public')); 之间的区别
【发布时间】:2021-01-21 06:37:34
【问题描述】:

不知道下面两个是不是一样的。

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

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

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

它们之间到底有什么区别?

【问题讨论】:

    标签: express dirname route-parameters


    【解决方案1】:

    首先__dirname有3个用法,可以查看documentation

    制作新目录

    要在 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 作为第一个参数 以及您要添加为第二个的文件如果您运行快速应用程序 从另一个目录(不是root),使用绝对路径更安全 您要服务的目录,使用__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"));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-09
      • 2017-06-03
      • 1970-01-01
      • 2015-01-25
      • 2019-11-29
      相关资源
      最近更新 更多