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
Quelqu'un peut-il vous aider? pour référence c'est mon repo https://github.com/SpaceXar20/sql_library_manager-updated
4 Réponses :
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'.
J'ai mis à jour mon message, j'ai modifié mon code mais j'ai encore des problèmes
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'); });
J'ai modifié mon message
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.
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