statische Middleware
Installieren
Dies ist ein Node.js Modul über die
npm Registry. Installation erfolgt mit dem
npm install Befehl:
$ npm install serve-staticAPI
const serveStatic = require('serve-static');serveStatic(root, Optionen)
Erstellen Sie eine neue Middleware-Funktion, um Dateien innerhalb eines angegebenen Wurzel-
-Verzeichnisses zu bedienen. Die zu bedienende Datei wird durch die Kombination von req.url
mit dem angegebenen Wurzelverzeichnis bestimmt. Wenn eine Datei nicht gefunden wird, statt
eine 404-Antwort zu senden dieses Modul ruft stattdessen next() auf, um sich auf
zur nächsten Middleware zu bewegen, was Stapeln und Fallbacks erlaubt.
Optionen
akzeptiere Wertebereiche
Aktivieren oder deaktivieren Sie die Annahme von Fernanforderungen. Standardmäßig ist dies wahr.
Deaktivieren wird Accept-Ranges nicht senden und den Inhalt
des Range Request-Headers ignorieren.
cacheControl
Aktiviere oder deaktiviere die Einstellung Cache-Control Antwort-Header, Standardwert ist
true. Das Deaktivieren wird die immutable und maxAge Optionen ignorieren.
dotfiles
Legen Sie fest, wie “dotfiles” beim Auftreten behandelt werden. Eine Dotdatei ist eine Datei
oder ein Verzeichnis, das mit einem Punkt beginnt (”.”). Beachten Sie, dass diese Überprüfung auf
durchgeführt wird, ohne zu überprüfen, ob der Pfad tatsächlich auf der
Platte vorhanden ist. Wenn root angegeben ist, werden nur die Punkte oberhalb des Roots
aktiviert (i. . Das Root selbst kann innerhalb einer dotfile liegen, wenn
auf “deny” gesetzt wird.
erlaub'Keine spezielle Behandlung für dotfiles.'deny'leugne eine Anfrage für eine dotfile und 403/next().'ignore'Pretend as the dotfile does not exist and 404/next().
Der Standardwert ist ‘ignore’.
etag
Aktiviere oder deaktiviere Etagenerzeugung, Standardwert ist ‘true’.
erweiterungen
Fallbacks für Dateierweiterung festlegen. Wenn gesetzt, wenn eine Datei nicht gefunden wird, werden die angegebenen
-Erweiterungen zum Dateinamen hinzugefügt und gesucht. Die Erste, die
existiert, wird bedient. Example: ['html', 'htm'].
Der Standardwert ist false.
durchfallen
Legen Sie die Middleware so fest, dass Client-Fehler nur als unbehandelte
-Anfragen durchlaufen, sonst leiten Sie einen Client-Fehler weiter. Der Unterschied ist, dass Client-
-Fehler wie eine schlechte Anfrage oder eine Anfrage an eine nicht existierende Datei dazu führen, dass
diese Middleware einfach next() zu deiner nächsten Middleware führt, wenn dieser Wert
true ist. Wenn dieser Wert false ist, rufen diese Fehler (sogar 404s)
next(err) auf.
Normalerweise wird true so gewünscht, dass mehrere physikalische Verzeichnisse
der gleichen Webadresse zugeordnet werden können oder dass Routen nicht existierende Dateien ausfüllen.
Der Wert false kann verwendet werden, wenn diese Middleware an einem Pfad gemountet wird, der
so konzipiert ist, dass es sich ausschließlich um ein einziges Dateiverzeichnis handelt, das
Kurzschluss 404 s für weniger Overhead ermöglicht. Diese Middleware wird auch auf
alle Methoden antworten.
Der Standardwert ist true.
unveränderbar
Aktivieren oder deaktivieren Sie die immutable Direktive in der Cache-Control Antwort
-Kopfzeile, standardmäßig false. Wenn true gesetzt ist, sollte die maxAge Option
ebenfalls angegeben werden, um das Caching zu aktivieren. The immutable directive will prevent
supported clients from making conditional requests during the life of the
maxAge option to check if the file has changed.
indexieren
Standardmäßig sendet dieses Modul “index.html” Dateien als Antwort auf eine Anfrage
in einem Verzeichnis. Um diese Einstellung zu deaktivieren false oder um einen neuen Index anzuliefern, übergeben Sie einen
String oder ein Array in bevorzugter Reihenfolge.
zuletzt geändert
Aktiviere oder deaktiviere Last-Modified Header. Standardmäßig ist ‘true’. Verwendet den zuletzt geänderten Wert der Datei
.
maxAge
Geben Sie ein Max-Alter in Millisekunden für http Caching an, standardmäßig 0. This can also be a string accepted by the ms module.
umleiten
Umleiten zu ”/” am Ende, wenn der Pfadname ein dir. Standard ist true.
setHeaders
Funktion zum Setzen benutzerdefinierter Header beim Antworten. Alterations to the headers need to
occur synchronously. Die Funktion wird als fn(res, path, stat) aufgerufen, wobei
die Argumente sind:
resdas Antwortobjekt- “path” der Dateipfad, der gesendet wird
- “stat” das stat-Objekt der zu sendenden Datei
Beispiele
Dateien mit Vanilla node.js http-Server bedienen
const finalhandler = require('finalhandler');const http = require('http');const serveStatic = require('serve-static');
// Serve up public/ftp folderconst serve = serveStatic('public/ftp', { index: ['index.html', 'index.htm'] });
// Create serverconst server = http.createServer((req, res) => { serve(req, res, finalhandler(req, res));});
// Listenserver.listen(3000);Alle Dateien als Downloads bedienen
const contentDisposition = require('content-disposition');const finalhandler = require('finalhandler');const http = require('http');const serveStatic = require('serve-static');
// Serve up public/ftp folderconst serve = serveStatic('public/ftp', { index: false, setHeaders: setHeaders,});
// Set header to force downloadfunction setHeaders(res, path) { res.setHeader('Content-Disposition', contentDisposition(path));}
// Create serverconst server = http.createServer((req, res) => { serve(req, res, finalhandler(req, res));});
// Listenserver.listen(3000);Bedienung mit Express
Einfach
Dies ist ein einfaches Beispiel für die Verwendung von Express.
const express = require('express');const serveStatic = require('serve-static');
const app = express();
app.use(serveStatic('public/ftp', { index: ['default.html', 'default.htm'] }));app.listen(3000);Mehrere Wurzeln
Dieses Beispiel zeigt eine einfache Möglichkeit, mehrere Verzeichnisse zu durchsuchen.
Dateien werden zuerst in public-optimized/ gesucht, dann public/ Sekunde
als Fallback.
const express = require('express');const path = require('path');const serveStatic = require('serve-static');
const app = express();
app.use(serveStatic(path.join(__dirname, 'public-optimized')));app.use(serveStatic(path.join(__dirname, 'public')));app.listen(3000);Verschiedene Einstellungen für Pfade
Dieses Beispiel zeigt, wie man je nach Datei ein anderes Alter festlegt. In diesem Beispiel werden HTML-Dateien nicht zwischengespeichert, während alles andere für 1 Tag ist.
const express = require('express');const path = require('path');const serveStatic = require('serve-static');
const app = express();
app.use( serveStatic(path.join(__dirname, 'public'), { maxAge: '1d', setHeaders: setCustomCacheControl, }));
app.listen(3000);
function setCustomCacheControl(res, file) { if (path.extname(file) === '.html') { // Custom Cache-Control for HTML files res.setHeader('Cache-Control', 'public, max-age=0'); }}