ExpressJS: Wie kann ich ignorieren Sie öffentliche statische Dateien, die in meiner route?
app.get("/:name?/:group?", function(req, res){...
ist die entsprechenden Dateien sind in meinem öffentlichen Verzeichnis. Also, wenn ich auch ein stylesheet:
<link type="text/css" href="/stylesheets/style.css" />
Knoten entsprechen /stylesheets/style.css und weisen Namen der Wert stylesheets und Gruppe der Wert Stil.css.
Was ist der beste Weg, dies zu vermeiden?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist die einfachste Sache sein kann, um sicherzustellen, dass express läuft die static middleware-Anbieter vor, um die router-middleware. Sie können dies tun, indem Sie tun:
Diese Weise die statische Datei finden und reagieren, und der router wird nicht ausgeführt. Ich habe ähnliche Verwirrung mit der router-Standard-position (Letzte) Schrauben mit meiner Zusammenstellung von coffeescript-Dateien. FYI es gibt docs, die auf dieser hier (suchen Sie die Seite für
app.router
und Sie werden sehen, einen erklärenden Absatz./public
in Ihren URLs, das Dateisystem, oder beides. In der Regelpublic
ist der name des Dateisystems Verzeichnis, aber nicht als Teil der URL. Ob Sie bedürfen der ausdrücklichen Linie überapp.router
hängt auch davon ab, wie Ihre anderen Aufrufeapp.get
und Freunde sind bestellt/organisiert.app.get("/*", function(req, res) {})
zu fangen "direkte" url-Anforderungen und die Seite neu geladen etc, aber ich wollte es nicht zu sein, die Handhabung der nachfolgenden Seite Anfragen, für css, js, img-Dateien. Ich legteapp.use(express.static("public"));
oben, und das Fangnetz nicht mehr bearbeitet diese Anfragen.Für jeden, der es brauchen kann, meine Lösung war die Verwendung von Middleware. Wenn jemand findet eine bessere Lösung, lassen Sie es mich bitte wissen!
Hätte man auch einen reverse-proxy wie Nginx Griff die statischen Dateien für Sie. Ich glaube, dass viele professionelle Node /Ruby on Rails-setups tun es auf diese Weise.