ПРИМЕЧАНИЕ. Оказывается, моя проблема - это не 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