NOTA: il mio problema non è il middlware express.static(), ma piuttosto la differenza tra app.use() e app.get(). Questa domanda risponde perfettamente (il modo migliore di documentazione API espresso!):Qual è la differenza tra app.use e app.get con express.static?
Difference between app.use and app.get in express.js
ho capito la differenza tra app.use ('/') e app.get ('/') per essere così quest'ultimo serve solo richieste GET HTTP a quell'endpoint, mentre il primo serve TUTTE le richieste HTTP a quell'endpoint.
Capisco anche che il middleware express.static serve pagine statiche da un percorso di directory a un endpoint.
Quello che non seguo perché questo:
app.get('/', express.static(__dirname + '/public')
serve solo la prima pagina richiesta, e non uno qualsiasi dei ref = o pagine src = collegamento/script a cui fa riferimento la pagina richiesta. Ad esempio, qui ci sono due tracce morgan rispondere ad una semplice pagina index.html che ha un link al file css 'style.css' traccia richiesta
1) Server utilizzando app.use ('/')
Server listening on 0.0.0.0:8080
GET/200 6.258 ms - 444
GET /style.css 304 2.842 ms - -
richiesta 2) Server di traccia utilizzando app.get ('/')
Server listening on 0.0.0.0:8080
GET/304 5.131 ms - -
GET /style.css 404 2.990 ms - 22
404 ???
Come è possibile che anche se il browser ha inviato una richiesta GET a "/", app.get ('/') non è riuscita a servire il css, ma app.use ('/') ha avuto esito positivo.
Quali dettagli mi mancano con app.get ('/') o express.static?
Grazie in anticipo, PT
Ecco il semplice, semplice codice:
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);
Ed ecco il html ...
index.html
<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
</html>
Percorso:
/app.js
/pub/index.html
/pub/style.css
Se si dispone di elementi nell'ordine corretto e il contenuto è presente nella directory appropriata e non si verificano errori, consultare la [Documentazione rapida] (http://expressjs.com/api.html#express.static) , questo dovrebbe funzionare: 'app.use (express.static (__ dirname + '/ public'));'. Ma dovrai stare molto attento sull'ordine delle cose. Questa è la solita ragione per cui il contenuto statico viene inserito in un percorso separato, quindi i gestori middleware e '.get()' sono più facili da separare con una designazione del percorso (ad esempio server tutto il contenuto statico da un percorso URL di '/ lib' o qualcosa del genere Mi piace quello . – jfriend00
Tuttavia, come si riferisce alla domanda? Non capisco la risposta. Funziona bene con .use(). Ci sono solo due file in "public /" e un endpoint, "/". Shouldn ' t .use e .get sia rispondere al GET del browser allo stesso modo? Qual è la differenza? – PeterT
Quindi, credo di non capire quale problema stai cercando di risolvere? Non mi è chiaro quali URL tu Voglio generare una risposta. Per favore, mostra alcuni esempi: – jfriend00