Ich möchte als statische Dateien dienen index.html
und /media
Unterverzeichnis. Die Indexdatei sollte sowohl unter /index.html
als auch unter /
URLs bereitgestellt werden.
ich habe
web_server.use("/media", express.static(__dirname + '/media'));
web_server.use("/", express.static(__dirname));
aber die zweite Zeile dient anscheinend dem gesamten __dirname
, einschließlich aller darin enthaltenen Dateien (nicht nur index.html
und media
), was ich nicht will.
Ich habe es auch versucht
web_server.use("/", express.static(__dirname + '/index.html'));
aber Zugriff auf die Basis-URL /
führt dann jedoch zu einer Anforderung an web_server/index.html/index.html
(Doppelkomponente index.html
), die natürlich fehlschlägt.
Irgendwelche Ideen?
Übrigens konnte ich in Express absolut keine Dokumentation zu diesem Thema finden ( static()
+ seine Parameter) ... frustrierend. Ein Doc-Link ist ebenfalls willkommen.
express.static()
wird vonserve-static
Paket-Middleware gehandhabt . Sie finden die Dokumente unter npmjs.com/package/serve-static oder github.com/expressjs/serve-static .Antworten:
express.static()
erwartet, dass der erste Parameter ein Pfad eines Verzeichnisses und kein Dateiname ist. Ich würde vorschlagen, ein anderes Unterverzeichnis zu erstellen, das Ihr enthält,index.html
und dieses zu verwenden.Bereitstellen statischer Dateien in der Express- Dokumentation oder in einer detaillierteren
serve-static
Dokumentation , einschließlich des Standardverhaltens beim Bereitstellenindex.html
:quelle
express.static
erwartet man, dass ein Parameter Pfad ist ....Wenn Sie dieses Setup haben
Dann sollte dies bekommen, was Sie wollten
Der Trick besteht darin, diese Zeile als letzten Fallback zu verlassen
Da Express die Connect-Middleware verwendet, war es für mich einfacher, den Connect-Quellcode direkt anzusehen.
Diese Zeile zeigt beispielsweise, dass index.html https://github.com/senchalabs/connect/blob/2.3.3/lib/middleware/static.js#L140 unterstützt wird
quelle
Application.configure()
wurde in 3.x als Legacy dokumentiert und in 4.x entfernt. Ein aktualisiertes Beispiel finden Sie in der Antwort von ChrisCantrell.__dirname
? Was ist ihr Wert?In der neuesten Version von Express ist der "createServer" veraltet. Dieses Beispiel funktioniert für mich:
quelle
__file__
das Sie mitos.path.dirname(os.path.realpath(__file__))
public/teams/logo.png
?res.sendFile
&express.static
beide werden dafür arbeitenWo
public
befindet sich der Ordner, in dem sich der clientseitige Code befindet?Wie vorgeschlagen von @ATOzTOA und geklärt durch @Vozzie ,
path.join
die Pfade als Argumente zu verbinden in Anspruch nimmt,+
übergibt ein einziges Argument Pfad.quelle
path.join
Nimmt die zu verbindenden Pfade als Argumente und+
übergibt ein einzelnes Argument an den Pfad.path.join(public + 'index.html')
inpath.join(public, 'index.html')
Und währenddessen__dirname + "/public/"
inpath.join(__dirname, 'public')
quelle
quelle
Verwenden Sie unten in Ihrer app.js.
(Ordnername ist Ordner mit Dateien) - Denken Sie daran, dass auf diese Assets direkt über den Serverpfad zugegriffen wird (dh http: // localhost: 3000 / abc.png (wobei sich abc.png im Ordnerordner befindet).
quelle