Подтвердить что ты не робот

Какая разница между app.use и app.get с express.static?

ПРИМЕЧАНИЕ. Оказывается, моя проблема - это не middlware express.static(), а разница между app.use() и app.get(). Этот вопрос отвечает на него отлично (лучше, чем экспресс-документы API!):

Разница между app.use и app.get в express.js

Я понимаю разницу между app.use('/') и app.get('/') в том, что последний обслуживает только HTTP GET-запросы к этой конечной точке, а первый обслуживает ВСЕ HTTP-запросы к этой конечной точке.

Я также понимаю, что промежуточное ПО express.static обслуживает статические страницы из пути каталога к конечной точке.

Я не понимаю, почему это:

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

Служит только запрошенной первой странице, а не страницам ссылок ref = или src= link/ script, на которые ссылается запрошенная страница. Например, вот две морганские трассы, отвечающие на простую страницу 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?

Спасибо заранее, 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
4b9b3361

Ответ 1

app.get('/', handler) - это "добавить/в таблицу маршрутизации, а когда HTTP GET-запрос поступит обработчиком вызовов"

app.use(middlevare) означает "добавить middlevare в стек".

"промежуточное ПО" - это функция, которая принимает (request, response, next), следующее промежуточное программное обеспечение явно вызывается предыдущим при следующем()

express.static() возвращает промежуточное программное обеспечение - в частности, функцию, которая проверяет путь запроса и передает содержимое соответствующего файла в ответ. Если вы добавите его с помощью app.get('/'), он никогда не вызывал не-маршруты "/"

Ответ 2

Короткий ответ app.use('/', express.static(__dirname + '/public')) будет соответствовать любому пути, начинающемуся с /. Это означает, что все, что связано с /about и /contact, включено. Однако app.get('/', express.static(__dirname + '/public')) будет соответствовать только конкретному маршруту /. Таким образом, /about и /contact, например, не будут включены.