我正在学习使用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',它也会找到404来查找css文件.
它是如何知道我正在尝试访问该静态文件的?如果我有一个名为'root/stylesheets/style.css'的文件以及'root/public/stylesheets/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
.