Estoy experimentando un problema de "Método no permitido" cuando intento anular mi solicitud POST con PUT (para actualizar la información en mi blog). Ya instalé la anulación del método para koa.
HTML:
<div class="create-message content"> <form action="/messages/edit/<%= message.id %>?_method=PUT" method="POST"> <label for="title">Message title:</label> <input required value="<%= message.title %>" type="text" id="title" name="title" required> <label for="snippet">Message snippet:</label> <input required value="<%= message.snippet %>" type="text" id="snippet" name="snippet" required> <label for="body">Message body:</label> <input required value="<%= message.body %>" type="text" id="body" name="body" required> <button>Update</button> </form> Mis rutas son las siguientes: //edit message router.get('/messages/edit/:id', async (ctx, next) => { const id = ctx.params.id; const result = await MessageModel.findById(id) await ctx.render('edit', { title: 'Messages', message: result }) });El código anterior funciona bien, pero después de hacer clic en el botón Enviar, se produce el problema "Método no permitido" en lugar de ejecutar esto:
//update edited message router.put('/messages/edit/:id', async (ctx, next) => { MessageModel.findByIdAndUpdate(ctx.params.id, ctx.request.body, {new:true}, (err:any, result:any) => { }) return ctx.redirect('/'); });Por favor comparta sus pensamientos sobre este tema. Gracias
Asegúrese de agregar lo siguiente a su archivo app.js (index.js).
app.use(methodOverride('_method'));No puede establecer el método de formulario en PUT, es GET o POST.
para enviar una solicitud PUT puede usar AJAX, a través de (por ejemplo) la API Fetch
EDITAR: mi mal, usaste el concepto de "tunelización" mencionado en esa solución.
según esta documentación, tal vez intente con
<form method="POST" action="/resource" enctype="application/x-www-form-urlencoded"> <input type="hidden" name="_method" value="PUT">