2012-03-25 3 views
18

Wie bekomme ich Expressjs die Lösch-und Put-Methoden für Formular verwenden?expressjs Unterstützung für Methode löschen und setzen ohne die Methode override

<form method="DELETE" action=""> 

Mit dem oben genannten Senden einer GET-Anfrage in der neuesten stabilen Version von Chrom. Soll das ein Browser-Problem sein?

Gibt es eine bessere Möglichkeit, dies außer Kraft zu setzen, ohne ein spezielles Eingabefeld für diese Unterstützung zu haben?

+2

löschen und legen Sie im Allgemeinen nur durch XMLHttpRequests, nicht durch regelmäßige Formulareinreichungen, wie Sie versuchen zu tun. siehe: http://stackoverflow.com/questions/165779/are-the-put-delete-head-etc-methods-available-in-fast-web-browsers –

+1

expressjs und nodejs verwenden REST-Architektur. er braucht PUT und/oder DELETE –

+0

Für Express 4 - Sie finden die Antwort hier. [http://stackoverflow.com/questions/24019489/node-js-express-4-x-method-override-not-handling-put-request?answertab=votes#answer-24020025][1] [1]: http://stackoverflow.com/questions/24019489/node-js-express-4-x-method-override-not-handling-put-request?answertab=votes#answer- 24020025 –

Antwort

40

Sie müssen nur das Formular gesetzt zu schreiben, erstellen Sie ein verstecktes Feld wie

<input type="hidden" name="_method" value="delete"/> 

und die Konfiguration festgelegt, nach der Express-Version Sie verwenden. Dann wird die Formularmethode durch den Wert dieses versteckten Feldes überschrieben.

Die neueste Version von benötigen Sie das method-override Paket, dann konfigurieren Sie Ihre App wie diese zu installieren:

var methodOverride = require('method-override') 
app.use(methodOverride('_method')); 

Alte Versionen verwenden könnten:

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded()); 
app.use(express.methodOverride()); 

Eine noch ältere Nutzung war:

app.use(express.bodyParser()); 
app.use(express.methodOverride()); 
+0

Es ist möglich, 'app.use (express.urlencoded());' und 'app.use (express.methodOverride()) zu verwenden;' 'bodyParser' fügt Unterstützung für das Hochladen von Dateien hinzu, was möglicherweise nicht wünschenswert ist. [Express docs] (http://expressjs.com/api.html#bodyParser) hat mehr Details. – yanychar

+0

tatsächlich express.bodyParser() ist in den Versionen 3.4 von Express und 2.9 von Connect veraltet. Es gibt Sicherheitsprobleme bei der Verwendung von express.bodyParser() hier erklärt – netusco

+0

Ich denke, das ist der [Artikel] (http://andrewkelley.me/post/do-not-use-hoodparser-with-express-js.html) @ErnestConill bezieht sich auf: – cbaigorri

2

tatsächlich express.bod yParser() ist in den Versionen 3.4 von Express und 2.9 von Connect veraltet. Es gibt Sicherheitsprobleme bei der Verwendung von express.bodyParser() explained here