Я создаю сайт с nodejs, express и mongoose. У меня есть концерты, которые будут добавлены при использовании маршрутов RESTful и комментариев пользователей, связанных с этими комментариями.
Когда я прихожу к маршруту УДАЛИТЬ, я хочу, чтобы пользователь предупреждался, а не удалял комментарий напрямую. Поэтому я использую модальные бутстрапы.
Во всяком случае, для турникетов это работало очень хорошо, но в комментариях, связанных с турникетами, я получаю очень странное поведение по этому поводу. Вместо удаления выбранного комментария он всегда удаляет самый старый комментарий. Но это ТОЛЬКО если я вставлю модальный бутстрап, без модального он удалит правильный, хотя я ничего не меняю в форме удаления.
Вот форма ejs без модала (удаляет выбранный комментарий):
<form action="/tourdates/td/<%=concert._id%>/comments/<%=comment._id%>?_method=DELETE" method="POST" class="deleteForm">
<input type="submit" class="btn btn-danger btn-sm" value="Delete">
</form>
Это тот же код с модальным (всегда удаляйте самый старый комментарий вместо выбранного):
<form action="/tourdates/td/<%=concert._id%>/comments/<%=comment._id%>?_method=DELETE" method="POST" class="deleteForm">
<a class="btn btn-danger btn-sm" data-toggle="modal" href="#collapseDelete" role="button" data-target="#deleteConcertComment">Delete</a>
<div class="modal fade" id="deleteConcertComment" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalCenterTitle">Delete Komment?</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
Are you sure?
</div>
<div class="modal-footer">
<button class="btn btn-secondary btn-sm" data-dismiss="modal">Cancel</button>
<input type="submit" class="btn btn-danger btn-sm" value="Delete">
</div>
</div>
</div>
</div>
</form>
А вот мой маршрут:
router.delete("/tourdates/td/:id/comments/:comment_id", function(req, res) {
Comment.findByIdAndRemove(req.params.comment_id, function(err) {
if(err) {
req.flash("error", "Es ist ein Fehler aufgetreten!");
console.log(err);
} else {
req.flash("success", "Kommentar wurde gelöscht!");
res.redirect("/tourdates/td/" + req.params.id);
}
});
});
Я действительно не понимаю, почему вторая версия удаляет самый старый комментарий в базе данных вместо выбранного. И, как я сказал, у меня есть то же самое для самих турдатов, использующих route / tourdates / td /: id, и там все работает просто отлично.
Есть идеи?
Обновление:
@ Нейл, ты прав. Моя ошибка заключалась в том, что я проверил кнопки удаления, которые я «прорезал» перед фактической кнопкой удаления. Так как я хочу эту функцию «Вы уверены», кнопки удаления, привязанные к отдельным комментариям, не будут запускать запрос на публикацию, они должны быть вызваны кнопкой удаления внутри модального окна.
Теперь, если я проверяю кнопки удаления, расположенные впереди, я вижу три разные формы (одну за другой) в моем окне проверок, и все они вызывают разные идентификаторы комментариев. Но если я нажму на них, модал откроется, и кнопка удаления внутри модала всегда будет указывать на один и тот же идентификатор.
Пожалуйста, смотрите рисунок, кнопка модального удаления всегда указывает на одну и ту же форму, в то время как отдельные кнопки удаления указывают на разные формы. Но что я должен изменить в своем коде тогда? введите описание изображения здесь