Я работаю над приложением для ведения блога (нажмите на ссылку, чтобы увидеть репозиторий GitHub ) с Express, E JS и MongoDB.
Мне не удалось удалить сообщение с помощью AJAX.
В моем файле маршрутов Dashboard (routes\admin\dashboard.js
) у меня есть:
// Delete Post
router.delete('/post/delete/:id', dashboardController.deletePost);
В моем контроллере Dashboard :
exports.deletePost = (req, res, next) => {
const postId = req.params.id;
posts.findByIdAndRemove(postId, function(err){
if (err) {
console.log('Error: ', err);
}
res.sendStatus(200);
});
}
В представлении, в котором перечислены сообщения в таблице, с кнопками "Редактировать" и кнопкой "Удалить" для каждого, что у меня есть :
<% if (posts) { %>
<% posts.forEach(function(post) { %>
<tr data-id="<%= post._id %>" class="d-flex">
<td class="col-1"></td>
<td class="col-4 col-lg-5">
<%= post.title %>
</td>
<td class="col-2"></td>
<td class="col-2"></td>
<td class="col-3 col-lg-2 text-right">
<div class="btn-group">
<a href="#" class="btn btn-sm btn-success">Edit</a>
<a href="#" class="btn btn-sm btn-danger delete-post" data-id="<%= post._id %>">Delete</a>
</div>
</td>
</tr>
<% }); %>
<% } else { %>
<tr>
<td colspan="5">There are no posts</td>
</tr>
<% } %>
Наконец, в public\assets\js\admin.js
У меня есть:
$(document).ready(function(){
$('.delete-post').on('click', function(evt){
evt.preventDefault();
let postId = $(this).data('id');
if(confirm('Delete this post?')) {
$.ajax({
url: '/post/delete/' + postId,
method: 'GET',
success: function(deleteMsg){
$('tr[data-id="' + postId +'"]').fadeOut('250');
}
});
}
});
});
У меня этого было достаточно для успешной операции удаления, но это не так.
ОБНОВЛЕНИЕ:
Если я заменю url: '/post/delete/' + postId,
на url: '/dashboard/post/delete/' + postId,
, я получу 500 internal server error
. Я вижу posts is not defined
во вкладке сети.
Что мне не хватает?