【问题标题】:Why does omitting the line app.use(express.static(__dirname, 'public')) stop my html pages from loading css files?为什么省略行 app.use(express.static(__dirname, 'public')) 会阻止我的 html 页面加载 css 文件?
【发布时间】:2016-03-14 10:48:06
【问题描述】:

我正在学习使用 NodeJS 和 Express,并且只是使用“express”来为项目生成脚手架。我不明白这样做的目的:

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

我对 app.use() 的理解是把函数加载为中间件,所以app.use(express.static(path.join(__dirname, 'public'))) 一定是加载函数吧?这个函数是否加载了一些我声明为静态文件的路径?

在我的 layout.jade 文件中,我的头部有这一行:

link(rel='stylesheet', href='/stylesheets/style.css')

当我设置 app.use(express.static) 行时,我的应用程序如何知道以“/public”开头的 href 链接(如果它正在这样做)?因为当我摆脱app.use(express.static) 行时,它会给出404 来查找css 文件,即使我将href 更改为'/public/stylesheets/style.css'。

它怎么知道我正在尝试访问该静态文件?如果我有一个名为 'root/stylesheets/style.css' 的文件以及 'root/public/stylesheets/style.css' 怎么办?

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    对,app.use() 加载了一个用作中间件的函数。在这种情况下,它加载express.static(path.join(__dirname, 'public'))的结果。

    express.static(path.join(__dirname, 'public')) 的结果是一个函数(在 JavaScript 中,函数可能返回函数),一个表达理解为中间件的函数(即它具有以下签名:function(request, response, next) { p>

    express.static() 是一个接受路径的函数,并返回一个中间件,该中间件将该路径中的所有文件提供给/。 (如果你想在它前面加上/public 或其他什么,你可以写app.use('/public', express.static(path.join(__dirname, 'public'))),其中第一个/publicweb 路径,第二个是文件系统路径 正在提供的文件)。


    为了更清楚起见,以下内容:

    app.use('/a', express.static(path.join(__dirname, 'b')));
    

    将提供b 目录内的所有文件,并通过http://example.com/a/FILE 访问它们。

    【讨论】:

    • 感谢您的快速答复。但是layout.jade 怎么知道在哪里可以找到style.css?可以通过http://example.com/stylesheets/style.css访问吗?
    • 嗯,在您服务器上的/public 目录下,有一个stylesheets 目录,其中有一个style.cssexpress.static() 知道递归解析目录。
    • 如果我有两个style.css 文件会怎样?它是否只返回它找到的第一个? express.static(path.join(__dirname, 'public')) 是否为所有 / 文件提供服务(这将是所有文件,还是/ 的直接子文件?)与/public 的内容,这就是layout.jade 可以访问/stylesheets/style.css 的方式?
    • 同一个目录下怎么会有两个style.css文件?此外,它将提供public 目录中的所有文件,位于/ 网络路径下。
    • @jazza_m8 你会的。但是你必须处理:mime 类型、标题、目录、文件读取。由于它是一个超级常见的用例,因此为您创建了一个辅助函数:)
    猜你喜欢
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    相关资源
    最近更新 更多