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

时间:2015-12-09 08:36:28

标签: node.js express

我正在学习使用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')

我的应用如何知道开始使用' / public' (如果那是他们正在做的事情)我设置app.use(express.static)行?因为当我摆脱app.use(express.static)行时,即使我将href更改为' /public/stylesheets/style.css',它也会找到404来查找css文件。

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

1 个答案:

答案 0 :(得分:11)

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

express.static(path.join(__dirname, 'public'))的结果是函数(在JavaScript中,函数可能会返回函数),这是一种表达为中间件的函数(即它具有以下签名:{{1 }}

function(request, response, next) {是一个获取路径的函数,并返回一个中间件,该中间件将该路径中的所有文件提供给express.static()。 (如果你想用/或其他什么作为前缀,你可以写/public,其中第一个app.use('/public', express.static(path.join(__dirname, 'public')))网络路径,第二个是正在提供的文件的文件系统路径

为了更清晰,以下内容:

/public

将提供app.use('/a', express.static(path.join(__dirname, 'b'))); 目录中的所有文件,并通过b访问它们。