Ich kenne keine Funktion dafür, kennt jemand eine?
203
Ich fand dieses Beispiel sehr hilfreich:
https://github.com/visionmedia/express/blob/master/examples/error-pages/index.js
Also ist es eigentlich dieser Teil:
// "app.router" positions our routes
// above the middleware defined below,
// this means that Express will attempt
// to match & call routes _before_ continuing
// on, at which point we assume it's a 404 because
// no route has handled the request.
app.use(app.router);
// Since this is the last non-error-handling
// middleware use()d, we assume 404, as nothing else
// responded.
// $ curl http://localhost:3000/notfound
// $ curl http://localhost:3000/notfound -H "Accept: application/json"
// $ curl http://localhost:3000/notfound -H "Accept: text/plain"
app.use(function(req, res, next){
res.status(404);
// respond with html page
if (req.accepts('html')) {
res.render('404', { url: req.url });
return;
}
// respond with json
if (req.accepts('json')) {
res.send({ error: 'Not found' });
return;
}
// default to plain-text. send()
res.type('txt').send('Not found');
});
app.router
ist jetzt veraltet. Siehe github.com/strongloop/express/wiki/…res.json
anstelle von zu verwendenres.send()
. Sie würden sich in Ihrem Code genauso verhalten, aber die Verwendung vonres.json
wird bei der automatischen Konvertierung von Objekten in Zeichenfolgen, bei denen dies.send()
nicht der Fall ist, etwas Magie bewirken . Sicher ist sicher. expressjs.com/api.html#res.jsonIch denke, Sie sollten zuerst alle Ihre Routen definieren und als letzte Route hinzufügen
Eine Beispiel-App, die funktioniert:
app.js:
quelle
app.get('/public/*', function(req, res){ res.sendfile(__dirname + '/public/' + req.url); })
Auf dieser Route können Sie statische Dateien senden. es funktioniert gut mit der obigen "*" Route.app.use(express.static(__dirname + '/public'));
funktioniert bei mir nicht, verkabelt.app.use(express.static(...))
kam nachapp.use(app.router)
. Sobald ich sie gewechselt hatte, kam alles gut heraus.Sie können eine Middleware an der letzten Position platzieren, die einen
NotFound
Fehlerauslöst , oder die 404-Seite sogar direkt rendern:
quelle
use()
deineapp.router
. (wie in meinem Fall)GET
s). Versuchen Sie esPOST
mit der anderen Methode mit einer zufälligen URL. Es wird die Standardeinstellung zurückgegebenCannot POST...
. Ein Angreifer würde dann wissen, dass Sie Express.JS verwenden.res.render('404')
Die obigen Antworten sind gut, aber in der Hälfte davon erhalten Sie nicht 404, wenn Ihr HTTP-Statuscode zurückgegeben wird, und in der anderen Hälfte können Sie keine benutzerdefinierte Vorlage rendern lassen. Der beste Weg, um eine benutzerdefinierte Fehlerseite (404) in Expressjs zu haben, ist
Platzieren Sie diesen Code am Ende aller Ihrer URL-Zuordnungen.
quelle
In der letzten Zeile von app.js setzen Sie einfach diese Funktion. Dadurch wird die Standardfehlerseite "Seite nicht gefunden" überschrieben:
Es überschreibt alle Anforderungen, die keinen gültigen Handler haben, und rendert Ihre eigene Fehlerseite.
quelle
Die Antwort auf Ihre Frage lautet:
Und es gibt einen großartigen Artikel darüber, warum es hier der beste Weg ist .
quelle
send
undend
?send
Mit dem Express-Fehler-Handler können Sie benutzerdefinierte Vorlagen, statische Seiten oder Fehler-Handler für Ihre Fehler angeben. Es werden auch andere nützliche Fehlerbehandlungsfunktionen ausgeführt, die jede App implementieren sollte, z. B. der Schutz vor 4xx-Fehler-DOS-Angriffen und das ordnungsgemäße Herunterfahren bei nicht behebbaren Fehlern. So machen Sie das, wonach Sie fragen:
Oder für einen benutzerdefinierten Handler:
Oder für eine benutzerdefinierte Ansicht:
quelle
In einigen Fällen kann die 404-Seite nicht so geschrieben werden, dass sie als letzte Route ausgeführt wird, insbesondere wenn Sie über eine asynchrone Routing-Funktion verfügen, die eine / route zu spät zur Party bringt. Das folgende Muster könnte in diesen Fällen übernommen werden.
quelle
https://github.com/robrighter/node-boilerplate/blob/master/templates/app/server.js
Dies ist, was Node-Boilerplate tut.
quelle
quelle
Der einfachste Weg, dies zu tun, besteht darin, einen Fang für die Fehlerseite zu haben
Dann
Jetzt können Sie alle Ihre "HTML" -Seiten (einschließlich einer fehlerhaften "HTML" -Seite) in einer Variablen speichern
Jetzt rufen Sie einfach die Seiten mit der Get-Methode auf und haben einen Haken für alle Routen, die nicht verfügbar sind, um mit app.get ("*") auf Ihre Fehlerseite zu gelangen.
Vergessen Sie nicht, einen Port einzurichten und auf den Server zu warten:
Dies sollte nun Ihre Fehlerseite für alle nicht erkannten Endpunkte anzeigen!
quelle
Während die obigen Antworten korrekt sind, müssen Sie für diejenigen, die dies in IISNODE zum Laufen bringen möchten, auch angeben
in Ihrer web.config (andernfalls frisst IIS Ihre Ausgabe).
quelle
Sie können Fehler nach Inhaltstyp behandeln
Zusätzlich Behandlung nach Statuscode.
app.js
404.jade
Wenn Sie res.format verwenden können, können Sie einfachen Fehlerbehandlungscode schreiben.
Empfehlung
res.format()
stattres.accepts()
.Wenn der 500-Fehler im vorherigen Code auftritt,
if(500 == err.status){. . . }
wird aufgerufenquelle
Hallo, bitte finde die Antwort
quelle
Wenn Sie ein Express-Generator-Paket verwenden:
next (err);
Dieser Code sendet Sie an die 404 Middleware.
quelle
So senden Sie eine benutzerdefinierte Seite:
quelle
Ich habe den folgenden Handler verwendet, um 404-Fehler mit einer statischen
.ejs
Datei zu behandeln.Fügen Sie diesen Code in ein Routenskript ein und fordern Sie ihn
file.js
dannapp.use()
in Ihremapp.js
/server.js
/ anwww.js
(wenn Sie IntelliJ für NodeJS verwenden).Sie können auch eine statische
.html
Datei verwenden.Auf diese Weise antwortet der laufende Express-Server mit einer richtigen Antwort,
404 error
und Ihre Website kann auch eine Seite enthalten, auf der die 404-Antwort des Servers ordnungsgemäß angezeigt wird. Sie können auch eine umfassennavbar
, dass404 error template
die Links zu anderen wichtigen Inhalte Ihrer Website.quelle
Wenn Sie von Ihren Funktionen (Routen) zu Fehlerseiten umleiten möchten, gehen Sie wie folgt vor:
Fügen Sie allgemeinen Code für Fehlermeldungen in Ihre app.js ein -
In Ihrer Funktion können Sie anstelle einer Fehlerseitenumleitung zuerst den Fehlerstatus festlegen und dann next () verwenden, damit der Codefluss den obigen Code durchläuft.
quelle
Die 404-Seite sollte unmittelbar vor dem Aufruf von app.listen eingerichtet werden. Express unterstützt * in Routenpfaden. Dies ist ein Sonderzeichen, das zu allem passt. Dies kann verwendet werden, um einen Routenhandler zu erstellen, der allen Anforderungen entspricht.
quelle
Abdeckung aller HTTP-Verben in
express
Um alle HTTP-Verben und alle verbleibenden Pfade abzudecken, können Sie Folgendes verwenden:
Die endgültige Lösung würde so aussehen:
Sie sollten nicht vergessen, den Router am Ende zu setzen. Weil die Reihenfolge der Router wichtig ist.
quelle
Der obige Code hat bei mir nicht funktioniert.
Also habe ich eine neue Lösung gefunden, die tatsächlich funktioniert!
Oder Sie können es sogar auf einer 404-Seite rendern.
Hoffe das hat dir geholfen!
quelle
quelle