Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 为什么省略app.use(express.static(&#dirname,';public';)这一行会阻止我的html页面加载css文件?_Node.js_Express - Fatal编程技术网

Node.js 为什么省略app.use(express.static(&#dirname,';public';)这一行会阻止我的html页面加载css文件?

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

我正在学习使用NodeJS和Express,并使用“Express”为项目生成脚手架。我不明白这样做的目的:

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类型、头、目录、文件读取。由于这是一个非常常见的用例,因此为您创建了一个帮助器函数:)