我正在使用blogging application,Express和MongoDB进行EJS(单击链接以查看GitHub回购)。
我无法通过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'); } }); } }); });
我具有足以使删除操作成功的事实,但事实并非如此。我想念什么?
我这样做是这样的>>,以获取完整的运行示例克隆updated node-cheat XPressBlog,然后运行节点索引,后接 routes / front-end / posts.jsnpm i
。将delete
添加到// Delete Single Post
router.delete('/:id', postsController.deleteSinglePost);
将,例如:deleteSinglePost
添加到controllers / front-end / posts.js
exports.deleteSinglePost = (req, res, next) => {
const {id} = req.params;
res.send(`This will DELETE post with id : ${id}`);
};
这是基于查看index.js
来完成的,即:
const dashboardRoute = require("./routes/admin/dashboard");
app.use('/dashboard', dashboardRoute);
const postsRoute = require('./routes/front-end/posts');
app.use('/', postsRoute);
:curl -X DELETE http://localhost:3000/100
这将删除ID为100的帖子