为什么省略 app.use(express.static(__dirname, 'public')) 行会阻止我的 html 页面加载 css 文件?



我正在学习使用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)行时,即使我将href更改为'/public/stylesheets/style.css',它也会为查找css文件提供404。

它怎么知道我正试图访问那个静态文件?如果我有一个名为"root/stylesheets/style.css"one_answers"root/public/stylesheet/style.css"的文件呢?

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

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

express.static()是一个采用路径的函数,并将为该路径中的所有文件提供服务的中间件返回给/。(如果你想用/public或其他什么作为前缀,你可以写app.use('/public', express.static(path.join(__dirname, 'public'))),其中第一个/public是所服务文件的web路径,第二个是文件系统路径


为了更清晰,以下内容:

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

将为b目录内的所有文件提供服务,并通过http://example.com/a/FILE访问这些文件。

相关内容

最新更新