2016-08-02 8 views
0

Ich habe eine Knoten App. Das ist so konfiguriert, statische Dateien zu bedienen von: app.use(express.static(path.join(__dirname, '../public'))); Und ich benutze einige Auth Middlewares auf anderen Routen. Das Problem tritt auf, wenn ich ein Bild anwähle, das auf dem Server nicht existiert. In diesem Fall sieht es so aus, als würde express versuchen, diese Anfrage durch alle Middlewares zu schicken, die ich für NICHT-statischen Inhalt habe. Gibt es eine Möglichkeit, 404 nur für fehlende statische Assets zu senden, anstatt alle Middlewares für fehlende Dateien erneut auszulösen?nodeJs/Express Umgang mit fehlenden statischen Dateien

Antwort

2

Die Middleware express.static() funktioniert standardmäßig so, dass sie nach der Datei im Zielverzeichnis sucht. Wenn sie nicht gefunden wird, gibt sie sie an die nächste Middleware weiter.

Aber es hat eine fallthrough Option, die, wenn Sie es auf false setzen, dann wird 404 sofort jede fehlende Datei, die im statischen Verzeichnis sein sollte.

Von the express.static() doc:

fallthrough

Wenn diese Option wahr, Client Fehler wie eine schlechte Anfrage oder eine Anforderung an eine nicht vorhandene Datei diese Middleware verursacht einfach Anruf nächste() um die nächste Middleware im Stack aufzurufen. Bei false, diese Fehler (auch 404s), wird nächsten (err) aufrufen.

Setzen Sie diese Option auf true, sodass Sie mehrere physische Verzeichnisse derselben Webadresse oder Routen zum Ausfüllen nicht vorhandener Dateien zuordnen können.

Verwenden falsch, wenn Sie diese Middleware auf einem Pfad angebracht sind entworfen streng ein einzelne Dateisystemverzeichnis zu sein, die für Kurzschließen 404s für weniger Aufwand ermöglicht. Diese Middleware wird auch antworten auf alle Methoden.

Beispiel:

app.use("/public", express.static("/static", {fallthrough: false})); 
+0

Danke. Arbeitete wie Charme. Ich würde auch hinzufügen, dass dies eine neue Funktion des ** serve-static ** -Moduls ist. Ich habe ** express 4.2.0 ** verwendet und diese Funktion war nicht in der Version von ** serve-static ** verfügbar, die mit express geliefert wird. Also benötigt um zu aktualisieren. – Max

+0

@Max - Ich wusste nicht, dass es nur ein neues Feature war - gut zu wissen. Das Express-Dokument identifiziert häufig nicht, welche Versionsfunktionen hinzugefügt wurden. – jfriend00

Verwandte Themen