Node.js 为什么省略app.use(express.static(dirname,';public';)这一行会阻止我的html页面加载css文件?
我正在学习使用NodeJS和Express,并使用“Express”为项目生成脚手架。我不明白这样做的目的:Node.js 为什么省略app.use(express.static(dirname,';public';)这一行会阻止我的html页面加载css文件?,node.js,express,Node.js,Express,我正在学习使用NodeJS和Express,并使用“Express”为项目生成脚手架。我不明白这样做的目的: app.use(express.static(path.join('public')) 我对app.use()的理解是它作为中间件加载函数,所以app.use(express.static(path.join(\uu dirname,'public'))必须加载函数,对吗?这个函数是否正在加载我声明为静态的某些文件的路径 在我的layout.jade文件中,我的头部有一行: 链接(rel
app.use(express.static(path.join('public'))代码>
我对app.use()的理解是它作为中间件加载函数,所以app.use(express.static(path.join(\uu dirname,'public'))
必须加载函数,对吗?这个函数是否正在加载我声明为静态的某些文件的路径
在我的layout.jade文件中,我的头部有一行:
链接(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”的文件和“root/public/stylesheets/style.css”的文件会怎么样?对,app.use()
加载一个函数作为中间件使用。在此上下文中,它加载express.static(path.join(uu dirname,'public'))的结果
express.static(path.join(uu dirname,'public'))
的结果是一个函数(在JavaScript中,函数可以返回函数),一个express理解为中间件的函数(即它具有以下签名:函数(请求、响应、下一个){
express.static()
,其中第一个/public
是web路径,第二个是所服务文件的文件系统路径)
为了更清楚,请参阅以下内容:
app.use('/a', express.static(path.join(__dirname, 'b')));
将为b
目录中的所有文件提供服务,并通过http://example.com/a/FILE
谢谢你的快速回答。但是layout.jade
如何知道在哪里可以找到样式.css
?是否可以通过http://example.com/stylesheets/style.css
?嗯,在/public
目录在您的服务器上,有一个样式表
目录,其中有一个style.css
express.static()
知道递归解析目录。如果我有两个style.css
文件,会发生什么?它只返回找到的第一个吗?express.static()也一样(path.join(uu dirname,'public'))
为所有/
文件提供服务(这是所有文件还是仅为/
的直接子文件?)有了/public
的内容,这就是layout.jade
如何访问/stylesheets/style.css
?同一目录下怎么会有两个style.css
文件?同时,它也会为/code>web路径下的public
目录下的所有文件提供服务。@jazza\u m8你会的。但是你会的'将必须处理:mime类型、头、目录、文件读取。由于这是一个非常常见的用例,因此为您创建了一个帮助器函数:)