Ich verwende express 4.13.3
(neuste) und folgenden Code:
POST leitet auf GET um, aber PUT leitet zu PUT um. Ist es möglich, PUT auf GET umzuleiten (wie bei POST)?
Vor dem Tauchen in den Details, unten ist eine Möglichkeit, wie Sie das Problem lösen könnten:
%Vor%Standardmäßig verwendet Express den HTTP-Code 302 für die Weiterleitung. Gemäß der HTTP-Spezifikation verhindert dies, dass POST / PUT-Anfragen als POST / PUT-Anfragen umgeleitet werden und erklärt, was Sie in Ihrem Code beobachtet haben:
Wenn der 302-Statuscode als Antwort auf eine andere Anforderung als empfangen wird GET oder HEAD, der User Agent darf NICHT automatisch die Anfrage, es sei denn, es kann vom Benutzer bestätigt werden, da dies möglicherweise Ändern Sie die Bedingungen, unter denen die Anforderung ausgegeben wurde.
Wenn Sie andererseits eine 303-Weiterleitung verwenden, kann die POST / PUT-Anfrage als POST / PUT-Anfrage umgeleitet werden, wie in diese großartige SO-Antwort :
303: Redirect für nicht definierten Grund. Normalerweise hat "Operation hat fertig, weiter woanders. ' Kunden, die nachfolgende Anfragen für Diese Ressource sollte den neuen URI nicht verwenden. Kunden sollten dem folgen Umleitung für POST / PUT / DELETE Anfragen.
Lassen Sie uns zuerst verstehen, was res.redirect
tut:
res.redirect ([Status,] Pfad)
Weist auf die vom angegebenen Pfad abgeleitete URL mit dem angegebenen HTTP-Statuscode-Status um. Wenn Sie keinen Status angeben, wird standardmäßig der Statuscode "302" gefunden. "
Wenn wir uns die HTTP 1.1-Spezifikation für eine 302-Antwort ansehen , sehen wir
Hinweis: Aus historischen Gründen kann ein Benutzeragent die Anfrage ändern Methode von POST zu GET für die nachfolgende Anfrage. Wenn das ist Verhalten ist unerwünscht, der Statuscode 307 (Temporary Redirect) kann stattdessen verwendet werden.
Eine 307-Anfrage behält das HTTP-Verb in allen Fällen bei, aber das ist nicht erwünscht. Sie möchten, dass das Verb in GET geändert wird. In diesem Fall möchten Sie ein 303 :
303 Siehe Sonstiges
Der Statuscode 303 (Siehe Andere) zeigt an, dass der Server ist Umleiten des Benutzeragenten zu einer anderen Ressource, wie von a angegeben URI im Kopfzeilenfeld "Location", das ein indirekte Antwort auf die ursprüngliche Anfrage. Ein Benutzeragent kann ausführen eine Abrufanforderung, die auf diesen URI abzielt ( eine GET- oder HEAD-Anforderung, wenn Verwendung von HTTP ), die möglicherweise auch umgeleitet werden und das Eventual präsentieren Ergebnis als Antwort auf die ursprüngliche Anfrage.
Eine 303-Antwort wird den Client auffordern, eine GET-Anforderung für die angegebene Ressource auszuführen (sofern er HTTP 1.1 versteht). Geben Sie einfach einen 303-Statuscode in Ihren Weiterleitungen ein:
%Vor% Der Weg von put ist korrekt, Sie leiten die Anfrage an einen anderen Ort um, aber die http-Methode ist dieselbe. Und deshalb versucht es, erneut auf put
zuzugreifen. (Sie ändern die http-Methode nicht.)
Warum
umleitetpost
aufget
Hier ist Antwort .