app.use和app.get与express.static有什么区别?

注意:原来我的问题不是middlware express.static(),而是app.use()和app.get()之间的区别。 这个问题完美地回答了(比expressionAPI文档更好!):

express.js中app.use和app.get的区别

我理解app.use('/')和app.get('/')之间的区别在于后者仅向该端点提供HTTP GET请求,而前者则向该端点提供所有HTTP请求。

我也明白,express.static中间件提供从目录path到端点的静态页面。

我不遵循的是为什么这样:

app.get('/', express.static(__dirname + '/public') 

只提供请求的第一页,而不是请求页面引用的任何ref =或src = link / script页面。 例如,这里有两个morgan跟踪一个简单的index.html页面,该页面有一个css链接到文件'style.css'

1)使用app.use('/')的服务器请求跟踪

 Server listening on 0.0.0.0:8080 GET / 200 6.258 ms - 444 GET /style.css 304 2.842 ms - - 

2)使用app.get('/')的服务器请求跟踪

 Server listening on 0.0.0.0:8080 GET / 304 5.131 ms - - GET /style.css 404 2.990 ms - 22 

404 ???

这是怎么回事,即使浏览器发送GET请求到'/',app.get('/')无法提供的CSS,但app.use('/')成功。

我用app.get('/')还是express.static缺less什么细节?

在此先感谢,PT

这是简单的,简单的代码:

app.js:

 var morgan = require('morgan'), express = require('express'), app = express(), server = require('http').Server(app); app.use(morgan('dev')); // Uncomment .get or .use, but not both // this only serves index.html, not style.css when I nav to localhost:8080/ //app.get('/', express.static(__dirname + '/pub')); // this serves both pages when I nav to localhost:8080/ app.use('/', express.static(__dirname + '/pub')); server.listen(8080); 

这里的HTML …

的index.html

 <!doctype html> <html> <head> <link rel="stylesheet" type="text/css" href="style.css"> </head> </html> 

path:

 /app.js /pub/index.html /pub/style.css 

app.get('/', handler)是“add / to routing table,并且当http GET请求到达call handler”

app.use(middlevare)是“添加中间件到堆栈”。

“中间件”是一个接受(request, response, next)的函数(request, response, next)一个中间件被next()

express.static()返回中间件 – 具体来说,是一个函数,用于检查请求的path并将相应文件的内容传送到响应。 如果你使用app.get('/')添加它, 它永远不会调用非“/”路由

简短的答案是app.use('/', express.static(__dirname + '/public'))将匹配任何以/开头的path。 这意味着包括/about/contact这样的东西。 但是, app.get('/', express.static(__dirname + '/public'))将只匹配特定的路由/ 。 所以, /about/contact ,例如,将不包括在内。