Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

475
Views
Eliminar un usuario con Mongoose, Express

Soy nuevo en Express y MongoDB. Creé una pequeña aplicación web en Node.js y estoy usando Express.js y Mongoose. Puedo crear un usuario con éxito y hacer que un usuario inicie sesión, pero tengo problemas para que un usuario pueda eliminar su cuenta.

Tengo un archivo user.js en mi carpeta de rutas, que es donde escribo el código para registrarme, iniciar sesión, eliminar, etc. Aquí hay un enlace al proyecto en GitHub ( https://github.com/NicholasGati/shopping- carro-2 ). El botón para eliminar la cuenta de un usuario se encuentra en views/user/edit.hbs. Puse el botón en un formulario. Cuando hago clic en el botón, el usuario no se elimina y se me redirige a '/' por algún motivo. Nota: '/:id' en mi archivo route/user.js se convierte en '/user/:id'.

Aquí está el código en el archivo route/user.js para el método de eliminación:

 router.delete('/:id', isLoggedIn, (req, res, next) => { User.findOneAndRemove({_id: req.params.id}, (err) => { if (err) { req.flash("error", err); return res.redirect("/user/edit"); } req.flash("success", "Your account has been deleted."); req.logout(); return res.redirect("/shop/coffee"); }); });

Aquí está el formulario en vistas/usuario/editar.hbs:

 <form action="/user/{{user.id}}" method="delete"> <div class="form-group"> <button type="submit" class="btn btn-danger">Delete Account</button> </div> </form>

Además, aquí está la función isLoggedIn:

 function isLoggedIn(req, res, next) { if (req.isAuthenticated()) { return next(); } res.redirect("/"); }
over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Como eres nuevo, creo que debería guiarte para encontrar el problema tú mismo :)

  1. Asegúrese de los métodos de formulario.
  2. Asegúrese de que se llame a la ruta para la eliminación de usuarios.

Si el marcado no parece correcto, lo siento porque estoy usando mi teléfono para publicar esta respuesta.

over 4 years ago · Santiago Trujillo Report

0

Tuve exactamente el mismo problema. Usé un XMLHttpRequest del lado del cliente para hacer esto. Lo siento, no tengo la experiencia suficiente para explicar por qué funcionó de esta manera y no desde el final del nodo, pero puede tener que ver con que los datos del formulario están diseñados inherentemente para pasar información, no para eliminarla. En cualquier caso, prueba esta solución.

En su código del lado del cliente:

Su código de botón (la acción del formulario no debería importar y, de hecho, la etiqueta tampoco debería importar, ya que la lógica se maneja en el JS, pero esto es lo que usé):

 <a href="/user/{{user.id}}"><button id = "del-btn" class="btn btn-danger">Delete</button></a>

Script para enviar una solicitud HTTP desde el clic del botón, este código debe ir en el mismo archivo que su botón anterior, o como un archivo JS incluido que la página HTML ha importado:

 <script> var del_btn = document.getElementById("del-btn"); del_btn.addEventListener("click", function(e) { var user = <%- JSON.stringify(user) %>; var xhr = new XMLHttpRequest(); xhr.open("DELETE", "/user/" + user._id); xhr.onreadystatechange = function () { if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) { console.log(xhr.responseText); window.location.href = "/users"; } }; xhr.send(); //make XMLHttpRequest to delete the poll here }, false); </script>

en la ruta del lado del servidor, observe cómo la respuesta es solo un código de éxito. Es la solicitud XMLHTTP del lado del cliente la que realiza la redirección:

 app.delete('/user/:id', isLoggedIn, function(req,res){ User.remove({ _id: req.params.id, ownerID: req.user._id }, function (err, user) { if (err) return console.error(err); console.log('User successfully removed from polls collection!'); res.status(200).send(); }); });
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!