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

Pet*_*erT 10 node.js express

注意:结果我的问题不是middlware express.static(),而是app.use()和app.get()之间的区别.这个问题完美地回答了它(比明确的API文档更好!):

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

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

我也理解express.static中间件提供从目录路径到端点的静态页面.

我不遵循的是为什么:

app.get('/', express.static(__dirname + '/public')
Run Code Online (Sandbox Code Playgroud)

仅提供所请求的第一页,而不是所请求页面引用的任何ref =或src = link/script页面.例如,这里有两个摩根跟踪响应一个简单的index.html页面,该页面有一个到文件'style.css'的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 - -
Run Code Online (Sandbox Code Playgroud)

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

Server listening on 0.0.0.0:8080
GET / 304 5.131 ms - -
GET /style.css 404 2.990 ms - 22
Run Code Online (Sandbox Code Playgroud)

404 ???

即使浏览器向'/'发送了GET请求,app.get('/')也无法为css提供服务,但是app.use('/')成功了.

app.get('/')或express.static我缺少什么细节?

在此先感谢,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);
Run Code Online (Sandbox Code Playgroud)

这是html ......

的index.html

<!doctype html>
<html>
  <head>
    <link rel="stylesheet" type="text/css" href="style.css">
  </head>
</html>
Run Code Online (Sandbox Code Playgroud)

路径:

/app.js
/pub/index.html
/pub/style.css
Run Code Online (Sandbox Code Playgroud)

And*_*rov 6

app.get('/', handler) 是"添加/到路由表,当http GET请求到达呼叫处理程序"时

app.use(middlevare) 是"将middlevare添加到堆栈".

"中间件"是一个接受的功能(request, response, next),下一个中间件由前一个显式调用next()

express.static()返回中间件 - 特别是一个检查请求路径并将相应文件的内容流式传输到响应的函数.如果你使用添加它app.get('/') ,从来没有调用非"/"路由