2012-03-25 11 views
18

¿Cómo obtengo expressjs para usar los métodos delete y put para formulario?soporte de expressjs para el método delete y put sin la methodoverride

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

Usando lo anterior está enviando una solicitud GET en la última versión estable de chrome. ¿Se supone que esto es un problema del navegador?

¿Hay una mejor manera de anular esto sin tener un campo de entrada especial para admitir esto?

+2

eliminar y generalmente solo funciona a través de XMLHttpRequests, no a través de envíos regulares de formularios como lo está intentando hacer. ver: http://stackoverflow.com/questions/165779/are-the-put-delete-head-etc-methods-available-in-most-web-browsers –

+1

expressjs y nodejs usan la arquitectura REST. él necesita usar PUT y/o DELETE –

+0

Para expresar 4 - aquí encontrará la respuesta. [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 –

Respuesta

40

Sólo tiene que establecer la forma para publicar, a continuación, crear un campo oculto como

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

y establecer la configuración, según la versión Express que está utilizando. Entonces el método de formulario será anulado por el valor de ese campo oculto.

La última versión de le pedirá que instale el paquete method-override, a continuación, configurar su aplicación como esta:

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

versiones antiguas podrían utilizar:

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

Un uso aún más antigua fue la siguiente:

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

Es posible utilizar 'app.use (express.urlencoded());' y 'app.use (express.methodOverride());' 'bodyParser' agrega soporte para la carga de archivos que puede no ser deseable. [Express docs] (http://expressjs.com/api.html#bodyParser) tiene más detalles. – yanychar

+0

realmente express.bodyParser() está en desuso en las versiones 3.4 de Express y 2.9 de Connect. Hay problemas de seguridad en el uso de express.bodyParser() explicado aquí – netusco

+0

Creo que este es el [artículo] (http://andrewkelley.me/post/do-not-use-bodyparser-with-express-js.html) @ErnestConill se refiere a: – cbaigorri

2

actually express.bod yParser() está en desuso en las versiones 3.4 de Express y 2.9 de Connect. Hay problemas de seguridad en el uso de express.bodyParser() explained here

Cuestiones relacionadas