Mi base de datos tiene 'artistas' que puedo crear y eliminar, pero de repente perdí la capacidad de editarlos. Cualquier otro tipo de solicitud funciona e incluso cuando envío la edición, las rutas no muestran errores y me redirigen a la página adecuada, por lo que sospecho que tiene algo que ver con el envío de mi formulario.
He incluido mis dos solicitudes de edición a continuación (obtener y poner) de mis rutas-> artistas.js, así como mi solicitud de eliminación ya que funciona bien.
router.get('/:id', catchAsync(async(req, res,) => { const artist = await Artist.findById(req.params.id); if (!artist) { req.flash('error', 'Cannot find that Artist'); return res.redirect('/artists'); } res.render('artists/show', { artist }); })); /* artist edits form*/ router.get('/:id/edit', catchAsync(async (req, res) => { const artist = await Artist.findById(req.params.id); if (!artist) { req.flash('error', 'Cannot find that Artist'); return res.redirect('/artists'); } res.render('artists/edit', { artist }); })) router.put('/:id', catchAsync(async (req, res) => { const { id } = req.params; const artist = await Artist.findByIdAndUpdate(id, { ...req.body.artist }); res.redirect(`/artists/${artist._id}`); }))Aquí está el formulario para actualizar el nombre de usuario:
<% layout('layouts/boilerplate')%> <div class="row"> <h1 class="text-center">Edit Artist</h1> <div class="col-md-6 offset-md-3"> <form action="/artists/<%=artist._id%>?_method=PUT" method="POST" novalidate class="validated-form" enctype="multipart/form-data"> <div class="mb-3"> <label class="form-label" for="artist[username]">Title</label> <input class="form-control" type="text" id="username" name="username" value="<%= artist.username %>" required> <div class="valid-feedback"> Looks good! </div> </div> <div class="mb-3"> <button class="btn btn-primary">Update artist</button> </div> </form> <a href="/artists/<%= artist._id%>">Back To artist</a> </div> </div>¿Qué estoy haciendo mal?