einen neuen Standort Header einige subtile diferences mit den Methoden gibt es für das Versenden zurück.
Mit redirect
:
app.get('/foobar', function (req, res) {
res.redirect(401, '/foo');
});
// Responds with
HTTP/1.1 401 Unauthorized
X-Powered-By: Express
Location: /foo
Vary: Accept
Content-Type: text/plain; charset=utf-8
Content-Length: 33
Date: Tue, 07 Apr 2015 01:25:17 GMT
Connection: keep-alive
Unauthorized. Redirecting to /foo
Mit status
und location
:
app.get('/foobar', function (req, res) {
res.status(401).location('/foo').end();
});
// Responds with
HTTP/1.1 401 Unauthorized
X-Powered-By: Express
Location: /foo
Date: Tue, 07 Apr 2015 01:30:45 GMT
Connection: keep-alive
Transfer-Encoding: chunked
Mit dem Original (falschen) Ansatz redirect
:
app.get('/foobar', function (req, res) {
res.status(401).redirect('/foo')();
});
// Responds with
HTTP/1.1 302 Moved Temporarily
X-Powered-By: Express
Location: /foo
Vary: Accept
Content-Type: text/plain; charset=utf-8
Content-Length: 38
Date: Tue, 07 Apr 2015 01:26:38 GMT
Connection: keep-alive
Moved Temporarily. Redirecting to /foo
So sieht es aus wie redirect
Gibt alle vorherigen Statuscodes zurück und sendet den Standardwert (sofern nicht im Methodenaufruf angegeben). Dies ist aufgrund der Verwendung von Middleware innerhalb von Express sinnvoll. Wenn Sie eine globale Middleware hätten, die Vorabprüfungen für alle Anfragen durchführt (wie zum Beispiel nach den richtigen Übernahmeköpfen usw.), wissen sie nicht, dass sie eine Anfrage umleiten müssen. Allerdings würde die Authentifizierungs-Middleware es und somit wissen, alle vorherigen Einstellungen zu überschreiben, um sie richtig einzustellen.
UPDATE: Wie in den Kommentaren unten angegeben, dass, obwohl Express einen 4XX- Statuscode mit einem Location-Header gemäß den Spezifikationen zu verstehen, bedeutet nicht senden kann es sich um eine akzeptable Antwort auf eine Anfrage Client ist. Tatsächlich ignorieren die meisten den Location-Header, außer der Statuscode ist ein 3XX-Wert.
Ich habe auch bemerkt, Express-Weiterleitungen POST zu GET, die mich überrascht – Plato
Nur eine kurze Anmerkung: Wenn das Asset mit Authentifizierung zugegriffen werden kann der Statuscode 401. Wenn es vollständig mit oder ohne Authentifizierung der Statuscode ist verboten sei 403. –
@brockangelo Ixe Antwort ist die einzige Möglichkeit, wie ich das (manuell .set(), dann .send()) tun kann. Aber ich denke, die größere Frage ist, ob Sie wirklich eine 401 senden möchten, wenn Sie eine Weiterleitung planen. Sehen Sie sich den SO-Link in meinem Kommentar zu Jasons Antwort –