我正在学习使用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
访问这些文件。