我正在学习使用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'?
答案 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
访问它们。