1
votes

Comment supprimer des lignes de données en utilisant Sequelize?

J'ai donc le routeur suivant dans un fichier carlin appelé books.js , dans ce routeur, j'utilise Sequelize ORM pour trouver une ligne de données en fonction de l'id afin de supprimer

form(action="/books/" + book.id , method="post" onsubmit="return confirm('Do you really want to delete this book?');")

c'est le formulaire à l'intérieur d'un fichier carlin appelé update-book.pug où j'ai un bouton qui, une fois appuyé, devrait supprimer la ligne de données et rediriger vers / books

    /* - Deletes a book. Careful, this can’t be undone. 
It can be helpful to create a new “test” book to test deleting.

create the post /books/:id/delete route*/
router.post('/:id/delete', function(req, res, next){
  Book.findOne({where: {id: req.params.id}}).then(function(book){
    return book.destroy();
  }).then(function(){
    res.redirect('/books/');  
  })
});

Une fois que j'appuie sur le bouton de suppression, j'obtiens le code d'état 200 (ok), mais mon navigateur reste dans la même page

entrez description de l'image ici

Quelqu'un peut-il vous aider? pour référence c'est mon repo https://github.com/SpaceXar20/sql_library_manager-updated


0 commentaires

4 Réponses :


0
votes

Vous avez défini un formulaire avec la méthode comme 'POST' et votre routeur attend une méthode 'DELETE'. Alors changez votre routeur pour accepter la méthode 'POST' ou faites une requête AJAX avec la méthode 'DELETE'.


1 commentaires

J'ai mis à jour mon message, j'ai modifié mon code mais j'ai encore des problèmes



2
votes

router.delete('/:id/delete', async (req, res, next) => {
  let book = await Book.findOne({where: {id: req.params.id}}).catch(e => {
     console.log(e.message)
  })
  if (!book){
    console.log("err");
  }
  book.destroy();
  res.redirect('/books');
});


1 commentaires

J'ai modifié mon message



-1
votes

Pourquoi utiliser deux requêtes distinctes lorsque la condition peut être placée dans la fonction destroy de sequelize? Et en réponse, vous obtenez le nombre d'enregistrements supprimés et pouvez vérifier si quelque chose a été supprimé ou non.


0 commentaires

1
votes

parce que vous utilisez une déclaration de retour, votre code doit être:

try{
  await Book.destroy({where:{id:req.params.id})
   res.redirect('/')

 }
 catch(e){
  console.log(e)
   // handle error better
 }

également, vous n'avez pas besoin de rechercher puis de supprimer cette requête trouve et supprimer automatiquement


0 commentaires